2012-03-30 74 views
5

我明白什麼是包裝,但是從文檔中您似乎可以獲得類型爲int的Class對象的實例。這是否會返回包裝器或某種類的int類實例?由於泛型和類型擦除,因此它沒有任何意義。是不是真的只能得到實際類的Class實例而不是原始類?當他們說代表他們是指其他東西的包裝?int.class返回什麼

這裏的JavaDoc說什麼,以及爲什麼我很困惑

TYPE 

public static final Class TYPE 

    The Class instance representing the primitive type int. 

    Since: 
     JDK1.1 
+1

我不跟隨「的邏輯,由於仿製藥和類型擦除...是不是真的只能得到實際類的[Class]實例而不是基元?泛型和類型擦除與類和基元之間的區別無關。 – 2012-03-30 04:04:12

+1

你會喜歡'void.class' :-) – Thilo 2012-03-30 04:07:49

回答

7

是不是真的,你只能得到實際的類不是基本類型的類實例?

的排序。

但有時你需要有一些元數據爲「原始整數」。例如,在查看方法簽名時。然後你得到一個Class[]的參數,你不知何故需要區分public void test(Integer x)public void test(int x)

所以爲了方便這個,對於原始類型有特殊的Class實例。

藉此更進了一步,甚至有java.lang.Void.TYPE

Class<Void> x = void.class; 

見識Javadoc

/** 
* Determines if the specified <code>Class</code> object represents a 
* primitive type. 
* 
* <p> There are nine predefined <code>Class</code> objects to represent 
* the eight primitive types and void. These are created by the Java 
* Virtual Machine, and have the same names as the primitive types that 
* they represent, namely <code>boolean</code>, <code>byte</code>, 
* <code>char</code>, <code>short</code>, <code>int</code>, 
* <code>long</code>, <code>float</code>, and <code>double</code>. 
* 
* <p> These objects may only be accessed via the following public static 
* final variables, and are the only <code>Class</code> objects for which 
* this method returns <code>true</code>. 
* 
* @return true if and only if this class represents a primitive type 
* 
* @see  java.lang.Boolean#TYPE 
* @see  java.lang.Character#TYPE 
* @see  java.lang.Byte#TYPE 
* @see  java.lang.Short#TYPE 
* @see  java.lang.Integer#TYPE 
* @see  java.lang.Long#TYPE 
* @see  java.lang.Float#TYPE 
* @see  java.lang.Double#TYPE 
* @see  java.lang.Void#TYPE 
* @since JDK1.1 
*/ 
public native boolean isPrimitive(); 
+2

你有時也必須小心這些特殊的類型。我曾經寫過一些代碼,我在那裏調用.getSuperclass()認爲我會很好,因爲一切都來自一個對象,對吧?不。 – xxpor 2012-03-30 04:05:16

+0

我覺得'Integer.TYPE'被聲明爲'Class '而不是'Class '有趣 - 似乎有些錯誤。 – 2012-03-30 04:08:03