用泛型实现数组的java转换
以下陈述之间有什么区别:
List<E>[] x = (List<E>[]) new List[100];
及
List<E>[] x = new List[100];
在我的脚本中,注意到前者是创建泛型数组的正确方法(尽管它会导致编译器警告)。但是我不太明白(List<E>[])
语句有什么用List<E>[]
甚至不是它自己的类型,编译器只需将其替换为(List[])
,因此
List<E>[] x = (List[]) new List[100];
从List[]
到List[]
的转换,这是无用的。那么,为什么要把(List<E>[])
放在第一位呢
# 1 楼答案
与泛型一样,存储在任何集合中的对象类型将在添加到集合时进行类型检查。主要通过泛型,代码可以被不需要了解泛型的其他人理解。因此,通过在编译时插入检查并在运行时擦除,可以实现这种行为
您可以看到:http://docs.oracle.com/javase/tutorial/java/generics/
# 2 楼答案
这是我给出的链接的一部分,我认为这很重要,所以我在这里发布
# 3 楼答案
这:
表示x是数组类型。该数组的元素是可以容纳类型E对象的列表。您正在为它分配一组列表,这些列表可以容纳任何对象
下一项声明:
情况也没有好转。选角没用。缺陷仍然是一样的
最终,所有这些都是这样做的借口:
Java中不允许使用泛型和数组。因为数组在运行时保留其元素类型,而泛型构造则不保留。不能存在元素类型未严格定义的数组
问题是由于定义了引用类型
List<E>[]
,根据定义,该类型不允许在Java中实例化。因此,避免使用此类类型你可以选择一个列表作为替代