在 Java 中,协变数组子类型意味着 ifA
是 的子类型B
thenA[]
被认为是 的子类型B[]
。我读到协变数组子类型是一个糟糕的设计选择,而多态数组是正确的设计选择。但是多态数组到底是什么意思呢?
问问题
263 次
1 回答
0
正如@Bhesh Gurung 在他的评论中指出的那样,数组协方差与List<T>
. 数组协方差意味着如果 classB
扩展 class A
,则 typeB[]
可分配给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]
。
于 2013-10-19T06:31:18.363 回答