java 數組協變


在某些情況下,即使某個對象不是數組的基類型,我們也可以把它賦值給數組元素。這種屬性叫做協變(covariance)。在下面的情況下可以使用協變:

數組是引用類型數組。

在賦值的對象類型和數組基類型之間有隱式轉換或顯式轉換。

由於在派生類和基類之間總是有隱式轉換的,因此總是可以將一個派生類的對象賦值給為基類聲明的數組。

只有數組存在協變,此功能有利也有弊,相對於List 是支持泛型 不支持協變

class A{

}

class B extends A{

A[] array = new B[10];

A[] array = new A[10];

array[0] = new B();

此種創建數組 或者賦值成功即為數組的協變原因

對於List

List<A> list = new ArrayList<B>();(編譯失敗,泛型) 

正是因為數組支持協變,也就導致存在下面的隱患

Object[] array = new Integer[10];
 array[0] = "s String";

編譯正常

運行則報異常

Exception in thread "main" java.lang.ArrayStoreException: java.lang.String
at com.me.test.Main.main(Main.java:9)

所以要合理的使用數組的協變

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM