我有一段代碼可以工作,我想問一下這裏發生了什麼?Java類型
Class<?> normalFormClass = null;
---添加---
通配符 「<?>
」 是混淆了我的一部分。爲什麼會使用它而不是使用它(泛型)?
我有一段代碼可以工作,我想問一下這裏發生了什麼?Java類型
Class<?> normalFormClass = null;
---添加---
通配符 「<?>
」 是混淆了我的一部分。爲什麼會使用它而不是使用它(泛型)?
這意味着它可以是任何類型的類。 ?是表示所有類型集合的通配符,或者「任何」。所以,你以後可以做
Integer normalForm = new Integer();
normalFormClass = normalForm.getClass();
或
String normalForm = new String();
normalFormClass = normalForm.getClass();
如果你不知道Java的泛型,讀http://java.sun.com/developer/technicalArticles/J2SE/generics/
至於爲什麼,我想可能是嚴格表達你的都是無處不在,你的代碼與老版本的Java不兼容,或者關閉一些觸發快樂的IDE。是的,
Class foo
和
Class<?> foo
是等價的。
我懷疑這是作業,因爲我從來沒有在一個講反思的課。
但是這是一個簡單的空分配。它什麼都不做。
班級或班級<?>運作良好。使用後者的一個原因是擺脫ide或編譯器在使用第一種形式時會拋出的一些警告。
另外,通用版本
Class<?> normalClass = null;
相當於原始類型的版本差不多,
Class normalClass = null;
的主要區別是,後者將與不的Java版本兼容支持泛型,如Java 1.4。
類<T>意味着從JDK 1.5開始,Class被類定義的類型泛化。考慮這一點的一種方式是Class是用於創建其類型實例的工廠。
具體而言,一個類<T>從Class.newInstance()方法創建類型T的實例。
從JDK 1.5開始,Java Language Spec建議您不要使用原始類型。因此,強烈建議在處理未知類型的類實例時,應將其稱爲「類<?>」,而不只是「類」。當然,如果你確實知道類型或邊界,你可能會發現指定它的一些好處。
類是可參數化類,因此你可以使用語法類,其中T爲一個類型。通過編寫Class,您聲明瞭一個可以是任何類型的Class對象(?是通配符)。類類型是包含關於類的元信息的類型。
通過使用Class來尊重這種做法(您知道Class是可參數化的),但通過指定一個泛型來引用泛型,這總是一種很好的做法,但您並沒有限制您的參數具有一個特定的類型。
參考有關泛型和通配符:http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html
約Class對象和反射參考(Java語言的功能來反思自身):http://java.sun.com/developer/technicalArticles/ALT/Reflection/
很好的例子!我仍然在學習Java的基礎知識,並一直在想這些括號中的代碼行。 – 2008-11-14 19:01:17
謝謝是的......我知道泛型,但是?通配符是我想確保我完全理解的東西。 – 2008-11-14 19:02:02
除非你不能像這樣創建一個新的類;)也許normalFormClass = obj.getClass(); – erickson 2008-11-14 20:54:08