2013-06-18 94 views
1

如果我這樣做:類型擦除 - 擴展Java泛型類是非通用

public class IntegerList extends ArrayList <Integer> { } 

我是否能夠使用IntegerList通常無需擔心類型擦除,這意味着我可以使用和創建它們的陣列和動態實例化它們,並且任何兼容的編譯器或IDE都能夠正確執行編譯和運行時類型檢查?

+0

雖然我無法解釋技術上爲什麼,我知道答案是肯定的,我做這樣的東西沒有問題 – fge

+0

是的,這是絕對好的(就語言)。在回答中很難給出任何東西,說實話......在設計方面它不太令人愉快 - 例如,並非每個「列表」都是一個「IntegerList」,所以它不像你可以使用的那樣他們互換。但它會*工作*。 –

+0

是的,當然。您可以。這裏沒有任何疑問.. – iMBMT

回答

1

是的,IntegerList實體類型,這是我想你想說的。

雖然我們在它,ArrayList也是一個具體化的類型,這意味着你可以做ArrayList,你可以做IntegerList做同樣的事情。 (但不是ArrayList<Integer>,這不是一個具體化類型。)

+0

的方法不太明白你的意思。我們沒有Java中的泛化泛型,而且你所說的內容也不同於對泛化泛型的正常理解。我很想知道你想表達什麼,你想介紹一下嗎? :) –

+0

@AdrianShum:哪部分你不明白?當你做'新東西[5]'時,'東西'必須是一個具體化的類型。當你做'instanceof something'時,'something'必須是一個具體化的類型。所以這正是OP所談論的。通用類型是運行時存在的類型,即原始類型。 Java沒有物化的泛化,這與泛化的泛型沒有任何關係。在泛化泛型中,參數化類型是泛化類型。在Java中,它們不是。 – newacct

+0

oops明白你的意思。我想我已經混淆了你正在談論的與泛化的泛型:P –