6.0、Java泛型 - 泛型与数组
泛型数组的创建 - 情况一:
可以声明带泛型的数组引用,但是不能直接创建带泛型的数组对象;
例如 ->
ArrayList<String>[] listArr = new ArrayList<String>[5];
可以声明 ArrayList<String>[ ] listArr 这样是没有问题的;但是直接创建带泛型的数组对象 -> new ArrayList<String>[5] 是不允许的;
如何解决 ->
我们可以声明带泛型的数组引用,然后用不带泛型的普通类型去创建数组对象,如下所示 ->
ArrayList<String>[] listArr = new ArrayList[5];
泛型数组的创建 - 情况二:
可以通过 java.lang.reflect.Array 的 newInstance(Class<T> , int) 创建 T [ ] 数组;
先来看一个错误案例 ->
public class Fruit<T> {
private T[] array = new T[3];
}
[ 很明显这是错误的,因为我们连 T 的类型都不知道,怎么可能去用 T 创建对象呢? ]
正确范例如下所示 ->
1 . 先声明一个数组引用 array,但是不创建对象;
2 . 然后通过构造方法创建数组对象;
public class Fruit<T> {
private T[] array;
//构造方法
public Fruit(Class<T> clz , int length) {//传入参数时假设指定数组类型为String则clz就是String.class
//通过Array.newInstance
array = (T[])Array.newInstance(clz , length);
}
}