泛型数组的创建
一、可以声明带泛型的数组引用,但是不能直接创建带泛型的数组对象
public static void main(String[] args) {
// 可以声明泛型数组引用ArrayList<String>[] listArr = new ArrayList[5]
// 不能直接创建带泛型的数组对象ArrayList<String>[] listArr = new ArrayList<>[5]
ArrayList<String>[] listArr = new ArrayList[5];
ArrayList<String> strList = new ArrayList<>();
strList.add("abc");
listArr[0] = strList;
String s = listArr[0].get(0);
System.out.println(s);
}
二、 通过java.lang.reflect.Array的newInstance (Class, int)创建T[ ]数组
java.lang.reflect.Array 的 newInstance (Class<T>, int)
创建T[ ]数组
泛型类
public class Fruit<T> {
// private T[] array = new T[3]; 错误
private T[] array;
//构造方法
public Fruit(Class<T> clz, int length) {
// 通过Array.newInstance创建泛型数组
array = (T[]) Array.newInstance(clz, length);
}
// 填充数组
public void put(int index, T item) {
array[index] = item;
}
//返回数组元素
public T get(int index) {
return array[index];
}
//得到整个数组
public T[] getArray() {
return array;
}
}
测试类
public static void main(String[] args) {
Fruit<String> fruit = new Fruit<>(String.class, 3);
fruit.put(0, "Apple");
fruit.put(1, "malo");
fruit.put(2, "banlala");
System.out.println(fruit.get(0));
System.out.println(fruit.get(1));
System.out.println(fruit.get(2));
System.out.println("---------------------");
String[] array = fruit.getArray();
for(String a:array) {
System.out.println(a);
}
System.out.println("---------------------");
String s = Arrays.toString(fruit.getArray());
System.out.println(s);
}