假設數組
class S { } class A : S { } class B : S { }
下面的代碼是能夠編譯經過的spa
S[] array = new A[5]; array[0] = new B(); List<S> list = new List<A>();
運行結果:.net
第一行代碼是能夠編譯經過的設計
第二行代碼運行時報錯code
第三行代碼編譯不經過。blog
由於Java有協變數組,因此.net的設計者的第一個版本時,也採起一樣的策略。雖然這個功能在Java中是一個公認的「瑕疵」編譯
泛型設計者認爲與其在運行失敗,不如在編譯時就失敗——靜態類型語言的所有意義在於代碼運行前找出錯誤。class