2013-05-27 4 views
5

Gibt es eine Möglichkeit zu wissen, ob eine bestimmte Klasse ist eine Klasse, die Boxen eine primitive Art oder muss ich auf eine hässliche Methode wie folgt machen:eine Box-Klasse

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; 
    } 
} 

EDIT:

wenn entschieden schließlich für diese Lösung:

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

Was ist mit 'Charakter'? –

+6

Das würde "wahr" für "my.package.Integer" zurückgeben! Es ist besser, es so zu machen: class == Integer.class || Klasse == Long.class || ... '(oder gleichwertig, ein' Set > 'würde sich als nützlich erweisen). –

+1

@Ziyao Wei: Ich möchte eine Methode genau, weil ich einige Fälle wie diese nicht verpassen möchte;) –

Antwort

-1

Wie wäre es suchen, wenn die Klasse Nummer implementiert, oder wenn es Zeichen ist, oder Boolean (ich denke, das sind die einzigen Optionen sind)?

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

In diesem Fall werden Sie für z. BigDecimal und AtomicInteger auch nicht sicher, ob das was du willst. Aber auf keinen Fall müssen Sie getSimpleName() durchlaufen.

+0

Gibt 'true' für' BigDecimal.class' zurück. –

2

Das ist der einfachste Weg, an den ich denken könnte. Die Wrapper-Klassen sind nur in java.lang Paket vorhanden. Und abgesehen von den Wrapper-Klassen hat keine andere Klasse in java.lang eine Variable mit dem Namen TYPE. Sie könnten das verwenden, um zu überprüfen, ob eine Klasse die Wrapper-Klasse ist oder nicht.

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;   
} 
Verwandte Themen