我讀通過莫臥兒(第3版)(最好的SCJP的書,我所遇到的)和727頁上的SCJP,它說以下內容:Java泛型:子類化一個通用的超類 - 子類是一個可定義的類型?
class MyIntList extends ArrayList <Integer> {} // A reifiable subclass
現在我在這裏只是有點疑惑。我知道子類屬於非泛型類型,但由於它擴展了ArrayList < Integer>和參數化的< Integer>將最終被擦除,並且此子類將繼承其超類的屬性,爲什麼這個子類MyIntList是可重用類型?
無論如何,這種區分在這種情況下如何重要?很明顯,新的MyIntList().getClass()== MyIntList.class'不會丟失任何信息(因爲還有什麼可能呢?) - 它是否正確地將單詞「reifiable」賦值給它還是不? –
您似乎認爲在這種情況下,'MyIntList'會在運行時將其超類參數''擦除。不是這種情況。泛型類的具體子類保留其超類泛型參數的類型信息。這使得一些[非常漂亮的技巧]成爲可能(http://gafter.blogspot.com/2006/12/super-type-tokens.html)。 –
@亨寧,想想所有的工具,測試等可以寫在一個約束列表。 –