2017-08-29 74 views
-1

按我讀數/理解的: -類型「級<>」

每次JVM創建一個對象,它也產生一個java.lang.Class對象描述對象的類型。同一班級的所有實例共享同一個Class對象。

Class<SomeClass>是表示此物體,這是Class類型和SomeClass型類的任何對象被創建時被創建(按照上面的定義),並且還,與SomeClass類相關聯的方式。

但是,當我閱讀下面的StackOverflow線程,對於Class<?>: -

What does Class<?> mean in Java?

它在第一個答案說,通過寫Class<?>,我們宣佈一個Class對象,它可以是任何類型。我很困惑,不管?是什麼,這個對象是不是Class類型,因爲它是類Class的對象?

我不明白'通用'是什麼。如果您必須在答案中使用該術語,我非常感謝您是否也可以同時解釋這一點。謝謝。

+2

您可能要開始[這裏](https://docs.oracle.com/javase/tutorial/java/generics/)。 IMO這個問題太廣泛了。 – Mena

+0

如果你不想處理泛型,你不必擔心未知類型()。 – tomas

回答

0

這是在第一個答案中說,通過編寫Class<?>,我們宣佈一個Class對象可以是任何類型。我很困惑,不管這個對象是什麼類型的Class?是因爲它是類Class的對象嗎?

不會。當您使用Class<?>時,您強制使用可參數化的類。例如,您可以使用List<>,因爲List可以參數化:例如,List<String>。您不能使用Dog

我不明白'通用'是什麼。如果必須用這個詞在你的答案,我會很感激,如果你能同時解釋說,太

the documentation

簡而言之,泛型類型啓用(類和接口)在定義類,接口和方法時是參數。就像方法聲明中使用的更熟悉的形式參數一樣,類型參數爲您提供了一種方法,讓您可以在不同的輸入中重用相同的代碼。區別在於形式參數的輸入是值,而類型參數的輸入是類型。

理解它們的最簡單方法可能是查看List的類。當您使用:

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

你指定鏈接到您的List一個類型。這種類型的然後可以在您的功能或實現使用:

ArrayList類試想一下,這樣的功能:

public T get(int index) { 
    return this.get(index); 
} 

這個函數會返回一個String對象,因爲我宣佈它作爲一個List<String>!所以我不必操縱一個對象列表,然後自己進行投射。我在列表的聲明中定義了列表的內容。

相關問題