0
在Java協變陣列中,子類型化意味着如果A
是B
的子類型,則A[]
被認爲是B[]
的子類型。我讀到covariant數組分類是一個糟糕的設計選擇,相反,多態數組是正確的設計選擇。但是多態陣列究竟意味着什麼?協變陣列子類型和多態陣列
在Java協變陣列中,子類型化意味着如果A
是B
的子類型,則A[]
被認爲是B[]
的子類型。我讀到covariant數組分類是一個糟糕的設計選擇,相反,多態數組是正確的設計選擇。但是多態陣列究竟意味着什麼?協變陣列子類型和多態陣列
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]
。
「A」的數組是「A []」而不是「列表」。 –
哦,你修好了。 – user782220