2014-01-14 51 views
0

我試圖通過Class<T>指定輸入類型(errm .. dirty-hacked)來實現泛型方法。爲什麼Boolean.class是java.lang.Class而String.class是java.lang.String?

public static <T> T getSecure(Class<T> type, String name, T def, ....) 

時的要求:

getSecure(String.class, "foo", "", ....); 

可以發現,type == String.classtype.getClass().toString().compareTo(String.class.toString()) == 0)

但是,對於任何傳入參數,type == boolean.class || type == Boolean.class始終爲false。

+1

我不明白你的問題。你似乎在比較兩種不同的東西。 –

+2

你真的沒有給我們足夠的信息繼續下去。請提供一個簡短但完整的程序來展示問題。 –

回答

2

爲什麼Boolean.class是java.lang.Class和String.class是 java.lang.String?

不是。

public static void main(String[] args) { 
    System.out.println(Boolean.class); 
    System.out.println(boolean.class); 
} 

打印

class java.lang.Boolean 
boolean 

預期。

0

,而不是進行通過獲取類,然後做一個字符串比較(獲得java.lang.String中),看它是否等於硬編碼字符串使用的instanceof像:

public static void main(String[] args) { 
    Object[] testData = {"", new Boolean(true), new Integer(2), new Long(3), true}; 

    for (Object object : testData) { 
     typeCheck(object); 
    } 
} 


private static void typeCheck(Object object) { 
    StringBuilder b = new StringBuilder(); 
    b.append(object instanceof String).append(", "); 
    b.append(object instanceof Boolean).append(", "); 
    b.append(object instanceof Integer).append(", "); 
    b.append(object instanceof Long); 

    System.out.println("Testing: "+object.getClass().toString()+": "+b.toString()); 
} 

輸出:

測試:類java.lang.String:真的,假的,假的,假的
測試:類java.lang.Boolean中的:假的,真的,假的,假的
測試:類java.lang.Integer:假,false,true,false
測試:c lass java.lang.Long:false,false,false
測試:class java.lang.Boolean:false,true,false,false

相關問題