0

在 Java 中,协变数组子类型意味着 ifA是 的子类型BthenA[]被认为是 的子类型B[]。我读到协变数组子类型是一个糟糕的设计选择,而多态数组是正确的设计选择。但是多态数组到底是什么意思呢?

4

1 回答 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 回答