1

可能重复:
确定对象是否为原始类型

这可能听起来很愚蠢,但请原谅我,我正在使用愚蠢的代码。给定一组对象,识别哪些是原语,或者更准确地说,是围绕原语的包装器,最好的方法是什么?

假设我想打印所有原语:

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

除了一一列举所有原语之外,这可能吗?

4

2 回答 2

5

优秀的Google Guava项目提供了Primitives.isWrapperType(Class)可以用作:

Primitives.isWrapperType(e.value().getClass())
于 2012-08-15T22:20:17.033 回答
1

您可以检查每个可能的原语,或者,如果您知道不会有任何 BigXxx 或 AtomicXxx,您也可以检查:

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

的子类列表Number

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

原语列表

布尔、字节、短、整数、长、字符、浮点、双精度

但是考虑到只有 8 种原始类型,您不妨将它们全部检查并在实用程序方法中进行测试。

ps:请注意,Guava 和可能重复中链接的答案也包括 Void,这与System.out.println(void.class.isPrimitive());打印为 true 的事实一致。

于 2012-08-15T22:19:11.763 回答