数组与泛型相比有两个重要的不同点。
首先,数组是协变的。相反泛型则是不可变的。
//这是被允许的
Object[] objectArray = new Long[1];
objectArray[0] = "hello world";//Throws java.lang.ArrayStoreException
//Won't compile! 不被允许:Type mismatch: cannot convert from LinkedList<Long> to List<Object>
List<Object> list = new LinkedList<Long>();
其次,数组是具体化的(reified)。因此数组会在运行时才知道并检查他们的元素类型约束。泛型是通过擦除来实现的。因此泛型只在编译时强化他们的类型信息,并在运行时丢弃(或者擦除)他们元素的类型信息。
创建泛型数组是非法的:
//Cannot create a generic array ofList<String>
List<String>[] stringLists = newList<String>[1];
一般来说,数组和泛型不能很好的混合使用。