2013-09-25 98 views
4

當我們說我們如何在原始類型上使用.class?

Class c = Integer.class; 
    System.out.println(c); 

它打印

class java.lang.Integer 

這是有道理的,因爲java.lang.Integer是一類。所以我們可以有一個對應的Class對象。

但是當我做

Class c1 = int.class; 
    System.out.println(c1); 

其打印int我覺得是種曖昧的.class回報類型的對象Classint不是一個類(但基本類型)。

當基本類型(primitiveType.class.getName())不存在時允許.class操作背後的動機是什麼?

此外,如果你看到toString()Class類的方法

public String toString() { 
    return (isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) 
     + getName(); 
} 

由於原始類型不是類或接口簡單地打印名稱(intint)。那麼爲什麼允許創建一個不存在的類的對象呢?

+0

我覺得這是Java反模式之一。 –

回答

3

據記載在the javadoc

的基本Java類型(布爾,字節,字符,短,整型,長整型,浮點和雙),並且關鍵字void也表示爲類對象。

當你想通過反射調用一個需要原始參數的方法時,它特別有用。

試想一個方法:

class MyClass { 
    void m(int i) {} 
} 

你可以訪問它:

MyClass.class.getDeclaredMethod("m", int.class); 
0

原始不是一類。這些是Java中的一些保留類型。

當你說整數,它在java.lang包如類:

Integer類{ ............ }

因此對於任何一類您可以使用.class,不適用於基元。順便說一句,你爲什麼需要這個?有什麼用?