1. 不能创建持有泛型的数组对象。
2. 不能创建泛型类型的数组 : 擦除类型,转换为Object[]
测试代码:
package array;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayOfGeneric {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String>[] ls;
// ls = new List<String>[10]; //Cannot create a generic array of List<String>
List[] list = new List[10];
//不可以定义,但是可以类型转换
ls = (List<String>[])list; // @SuppressWarnings("unchecked")
Object[] objs = ls;
objs[0] = new ArrayList<String>();
String[] strs;
try {
//编译通过,运行时报异常
strs = arrayOfGenericType(10); //java.lang.ClassCastException:
} catch(Exception e) {
System.out.println(e);
}
//此处运行正常
strs = arrayOfGenericType(String.class, 4);
System.out.println(Arrays.toString(strs));
}
@SuppressWarnings("unchecked")
public static <T> T[] arrayOfGenericType(int s) {
//此处必须强制转型,实际创建的是Object类型的数组
return (T[]) new Object[s]; // @SuppressWarnings("unchecked")
}
@SuppressWarnings("unchecked")
public static <T> T[] arrayOfGenericType(Class<T> kind, int s) {
//此处必须强制转型,实际创建的是kind类型的数组
return (T[]) Array.newInstance(kind, s); // @SuppressWarnings("unchecked")
}
}
//output
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
[null, null, null, null]