2015-09-25 104 views
3

我沒有一個實際的問題,我只是玩弄Java泛型,我意識到如果我用泛型創建一個類,我可以使用任何名稱作爲泛型部分的類所以在<>內),它將被視爲一個不存在的類,作爲一個變量。Java泛型與現有類

因此,如果我使用String作爲通用部分,它不會再是String,因此例如您不能使用它的charAt()方法。

我想,這是一個功能,因爲通常情況下,如果我知道我想要使用String比我簡單地使用它,並且我不創建泛型類。

我對不對?

+0

java中名字的含義高度依賴於上下文。在相同的.java文件中,可以使用相同的名稱來表示不同的內容。例如請參閱http://stackoverflow.com/q/17690135/2158288 – ZhongYu

+2

您可以限制泛型類型參數以擴展現有類型,在這種情況下,您可以使用該類型的方法。你是這個意思嗎? –

+1

這是因爲<>之間的名稱只是一個名稱 - 一個類型變量的名稱。就像你可以給定一個類的同名變量一樣。這樣做不是個好主意,因爲它很混亂。 – Jesper

回答

4

如果您使用全名(包括包裹),則仍然可以使用任何具有相同名稱的類。 java.lang.String

問題實際上與您在包中創建名爲String的類相同。你可以做到這一點,但是你也需要承擔相同包中的類將使用這個類而不是標準的String類的後果。

+1

'java.lang.String'的含義也很模糊:)它也可能意味着變量訪問,例如 – ZhongYu

+1

@bayou。io是的,創建一個無法通過簡單或合格名稱訪問某些內容的示例相對比較容易。 – biziclop

1

通用允許我們使用不同類型的單個實現。

例如,考慮來自java的collection frameworkList<T>是一種通用類型,您可以在java中創建任何類型的List。它爲您提供了不同的有用操作,您可以在不同的類型(如原始類型的包裝類)上執行這些操作。

如果您爲自定義類型使用泛型,那麼您可能需要指定某些實現來支持泛型功能。 您仍然可以使用類型的一般行爲

List<String> list = new ArrayList<String>(); 

這是一個表格類型String的列表。您可以像明智一樣創建任何List。現在,您可以輕鬆使用由java提供的許多功能。現在,如果您需要Integer的相同功能,那麼您需要重新編寫相同的功能。