2013-02-26 48 views
17

.class是什麼意思,例如,MyClass.class?我知道,當你把一個類的名稱和它用來訪問它的靜態字段或方法的地方,但它不涉及'.class'.class之後的含義是什麼

+5

說真的,作爲西班牙語的母語人士,我感到羞愧的是,人們如何將他們的希望寄託在谷歌翻譯上來幫助他們解決這類問題。 – 2013-02-26 23:59:44

+0

debemos culpar google翻譯entonces。 – irreputable 2013-02-27 00:02:43

+0

或者感到失望的是,儘管有其他所有成就,但我們還沒有制定出一條在語言和理解上聯合世界的道路。 – 2013-02-27 00:03:25

回答

10

SomeClass.class獲取Class<SomeClass>類型,您可以使用它編程使用reflection API

如果您有一個使用instance.getClass()的類的實例,則可以獲得相同的類型。您可以查看documentation here。例如,您可以:

  • 得到字段和方法,註釋等
  • 調用方法的名稱,得到構造函數來創建類
  • 的新實例獲取類的名稱,超類,包裝等
5

當一個類的名字後寫.class,它引用了Class對象,表示給定類(正式名稱,它是一個名爲類文字)。 NombreClase.class的類型是Class<NombreClase>

例如,NombreClase.class是表示運行時類別NombreClase的對象。這是NombreClase的任何(直接)實例的getClass()方法返回的相同對象。

NombreClase obj = new NombreClase(); 
System.out.println(NombreClase.class.getName()); 
System.out.println(obj.getClass().getName()) 
3

您可以添加.class任何類的名稱檢索其對象的實例。

當您使用Integer.class時,您引用了一個Class<Integer>的實例,該實例是一個類型化的類對象。

我一直認爲這是一個由編譯器添加的字段成員,但看起來它實際上只是語法糖。

+4

在您訪問靜態字段之前,您需要該類,因此如果該類是字段,它將是循環的。實際上,'A.class'只是編譯成'Class.forName(「A」)',所以沒有什麼不可思議的。 – irreputable 2013-02-27 00:15:49

+0

很酷......謝謝! – jahroy 2013-02-27 00:22:03