2013-10-19 25 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]