- 編譯器無法確定泛型的實際類型快耿,但可以保證在使用泛型時的一致性帜讲;
package chapter15._7._4;
import java.lang.reflect.Array;
import java.util.Arrays;
public class ArrayMaker<T> {
private Class<T> kind;
public ArrayMaker(Class<T> kind) {
this.kind = kind;
}
T[] create(int size) {
/**
* 這里如果不強轉(zhuǎn)的話會報錯,編譯期kind的類型是Object则北,
* 故Array.newInstance(kind, size)創(chuàng)建的是Object[],
* 而方法的返回類型是T[];
*/
return (T[])Array.newInstance(kind, size);
}
public static void main(String[] args) {
ArrayMaker<String> stringMaker = new ArrayMaker(String.class);
String[] stringArray = stringMaker.create(9);
System.out.println(Arrays.toString(stringArray));
}
}
package chapter15._7._4;
import java.util.ArrayList;
import java.util.List;
public class ListMaker<T> {
// 這里 new ArrayList<T>() 中的T不能少,否則會有警告辈毯;
List<T> create() {
return new ArrayList<T>();
}
public static void main(String[] args) {
ListMaker<String> stringMaker = new ListMaker<String>();
List<String> stringList = stringMaker.create();
}
}