2012-08-15 3 views
1

Duplicate possible:
Determining if an Object is of primitive typeinstance de primative (emballage)

Cela peut sembler idiot, mais s'il vous plaît pardonnez-moi, je travaille avec le code débile. Quel est le meilleur moyen, étant donné une collection d'objets, d'identifier quelles sont les primitives, ou plus exactement, les enveloppes autour des primitives.

Supposons que je veux imprimer toutes les primitives:

HashMap<String,Object> context = GlobalStore.getContext(); // Some bizarre, strangely populated context 
for(Entry<String,Object> e : context.entrySet()){ 
    if(e.value() instanceof PRIMITIVE){ // What goes here? 
     System.out.println(e); 
    } 
} 

Est-ce possible, autrement que par l'énumération toutes les primitives un par un?

Répondre

5

L'excellent projet Google Guava offre une Primitives.isWrapperType(Class) qui pourrait être utilisé comme:

Primitives.isWrapperType(e.value().getClass()) 
+1

écrire une méthode à 2 lignes ferait la même chose – Razvan

+0

Huzzah pour Goyave, merci, c'est exactement ce dont j'avais besoin! Beaucoup plus élégant qu'une solution maison. – dimo414

+0

Ou vous pouvez simplement extraire ce dont vous avez besoin ici https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/primitives/Primitives.java (mais c'est mauvais^^) –

1

Vous pouvez vérifier chaque possible primitive, ou, si vous savez qu'il n'y aura pas de BigXxx ou AtomicXxx vous pouvez également consulter:

if(e.value() instanceof Number || e.value() instanceof Boolean || e.value() instanceof Character) 

List of subclasses of Number:

AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short

List of primitives:

booléen, byte, short, int, long, char, float, double

Mais étant donné qu'il n'y a que 8 types primitifs, vous pourriez aussi bien vérifier tous et de mettre ce test dans une méthode utilitaire . Ps: Notez que Guava et les réponses liées dans la duplication possible incluent également Void, ce qui est cohérent avec le fait que System.out.println(void.class.isPrimitive()); imprime vrai.

+0

Qu'en est-booléens? – jahroy

+0

@jahroy bon point - édité. – assylias