2013-05-27 34 views
5

有沒有辦法知道,如果一個給定的類是一個類,盒爲基本類型,或做我必須做一個醜陋的方法是這樣的:檢測拳類

public boolean isBoxingClass(Class clazz){ 
    String simpleName=clazz.getSimpleName(); 
    switch(simpleName){ 
    case "Integer": 
    case "Long": 
    case "Boolean": 
    case "Double": 
    case "Float": 
     return true; 
    default : 
     return false; 
    } 
} 

編輯:

如果最終選擇此解決方案:

public static final List<Class> BOXING_CLASSES= Arrays.asList(new Class[]{ 
     Integer.class, 
     Long.class, 
     Short.class, 
     Boolean.class, 
     Double.class, 
     Float.class, 
     Character.class, 
     Void.class, 
     Byte.class}); 

public static boolean isBoxing(Class clazz){ 
    return BOXING_CLASSES.contains(clazz); 
} 
+1

怎麼樣'Character'? –

+6

這會爲'my.package.Integer'返回'true'!最好像這樣做'class == Integer.class || class == Long.class || ...(或者等價的,'Set >'會派上用場)。 –

+1

@Ziyao Wei:我想要的方法正是因爲我不想錯過這樣的一些案例;) –

回答

-1

怎麼樣,如果這個類實現號碼,或者如果它的性格,或布爾(我認爲這些是唯一的選項)看?

public boolean isBoxingClass(Class clazz) 
{ 
    return Number.class.isAssignableFrom(clazz) || 
      Character.class.isAssignableFrom(clazz) || 
      Boolean.class.isAssignableFrom(clazz); 
} 

在這種情況下,你可以爲例如。 BigDecimal和AtomicInteger,以及不知道這是你想要的。但在任何情況下,您都不需要通過getSimpleName()。

+0

爲'BigDecimal.class'返回'true'。 –

2

這是我能想到的最簡單的方法。包裝類僅出現在java.lang包中。除了包裝類以外,java.lang中沒有其他類具有名爲TYPE的變量。你可以用它來檢查一個類是否是Wrapper類。

public static boolean isBoxingClass(Class<?> clazz) 
{ 
    String pack = clazz.getPackage().getName(); 
    if(!"java.lang".equals(pack)) 
     return false; 
    try 
    { 
     clazz.getField("TYPE"); 
    } 
    catch (NoSuchFieldException e) 
    { 
     return false; 
    }   
    return true;   
}