實例

2012-08-15 61 views
1

可能重複:
Determining if an Object is of primitive type實例

這聽起來可能有些魯鈍,但請原諒我,我與魯鈍的代碼工作。給定對象集合的最好方法是什麼,以確定哪些是基元,或者更準確地說是基元周圍的包裝。

假設我要打印所有原語:

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

這是可能的,除了通過枚舉所有原始數據一個接一個?

回答

5

優秀Google Guava項目提供了可作爲一個Primitives.isWrapperType(Class)

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

寫一個2行的方法會做同樣的事情 – Razvan 2012-08-15 22:22:00

+0

Huzzah番石榴,謝謝,這正是我需要的!比家庭釀造的解決方案更加優雅。 – dimo414 2012-08-15 22:27:36

+0

或者你可以在這裏提取你需要的東西https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/primitives/Primitives.java(但是很糟糕^ ^) – 2012-08-15 22:31:34

1

您可以檢查每一個可能的原始的,或者,如果你知道不會有任何BigXxx或AtomicXxx您還可以檢查:

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

布爾,字節,short,int和長,焦炭,浮動,雙

但考慮到只有8原始類型,你不妨檢查所有這些,並把該測試的實用方法。

ps:請注意,番石榴和可能的重複鏈接中的答案也包括Void,這與System.out.println(void.class.isPrimitive());打印的事實一致。

+0

怎麼樣布爾? – jahroy 2012-08-15 22:19:33

+0

@jahroy好點 - 編輯。 – assylias 2012-08-15 22:21:13