2013-05-27 6 views
5

C'è un modo per sapere se una determinata classe è una classe che scatole di un tipo primitivo o devo fare un metodo di brutto come questo:Rileva una classe di pugilato

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:

Se infine optato per questa soluzione:

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

E il carattere? –

+6

Ciò restituire 'true' per' my.package.Integer'! È meglio farlo in questo modo 'class == Integer.class || class == Long.class || ... '(o equivalente, un' Set > 'sarebbe utile). –

+1

@Ziyao Wei: Voglio un metodo proprio perché non voglio perdere alcuni casi come questo;) –

risposta

-1

ne dite di guardare se la classe implementa numero, o se il suo carattere, o booleano (credo che quelle sono le uniche opzioni)?

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

In questo caso si ottiene per es. BigDecimal e AtomicInteger, non sono sicuro se questo è quello che vuoi. Ma in ogni caso non è necessario passare attraverso getSimpleName().

+0

Restituisce 'true' per' BigDecimal.class'. –

2

Questo è il modo più semplice che potessi pensare. Le classi wrapper sono presenti solo nel pacchetto java.lang. E a parte le classi wrapper, nessun'altra classe in java.lang ha una variabile denominata TYPE. Potresti usarlo per verificare se una classe è o meno una classe 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;   
} 
Problemi correlati