2013-10-19 27 views

回答

0

As @Bhesh Gurung在他的评论中指出,数组协变与泛型类如List<T>无关。阵列协方差意味着如果类B扩展类A,则类型B[]可指定为A[]

他们在Java中这样做的原因是为了允许诸如Arrays.equals(Object[], Object[])之类的方法在将泛型添加到Java之前回退。基本上,他们想要一种方法,它需要一个Object[]能够接受任何类型的数组。这是一个不好的选择,因为它会导致运行时类型错误。例如:

Object[] objs = (Object[]) new Integer[1]; 
objs[0] = "Hello"; // Compiles, but throws runtime error 

一个多态数组就像数组在Scala语言中的工作方式。您不需要声明new Integer[10],而是可以执行类似new Array<Integer>(10)的操作。我认为这可能是可取的,因为它可以让你做像初始化泛型类型的数组,或者使用泛型类型创建数组的东西。例如,new List<String>[10]