如何确定一个对象是整数、字符串还是布尔值?

14
我有一个对象,我想检测它的类型,这样我就可以调用相应的方法。
if (obj isa Integer)
  put(key,integerval);  
if (obj isa String)
    put(key,stringval);  
if (obj isa Boolean)
    put(key,booleanval);

3
这样做没有太多意义。即使在将值插入词典之前对其进行展开,它们也会自动重新装箱。 - Mark Byers
我正在使用ContentValues进行查询,并将列视为字符串处理,因此出现了ERROR/ContentValues(104): Cannot parse Integer value for true at key should_sync的错误。 - Pentium10
1个回答

36

实际上,你非常接近了!

if (obj instanceof Integer)
    put(key,integerval);  
if (obj instanceof String)
    put(key,stringval);  
if (obj instanceof Boolean)
    put(key,booleanval);

根据JLS 15.20.2:

RelationalExpression instanceof ReferenceType

在运行时,如果RelationalExpression的值不是null且引用可以强制转换(§15.16)为ReferenceType而不抛出ClassCastException异常,则instanceof操作符的结果为true。否则,结果为false

但从您的使用模式来看,似乎您可能有更大的问题。


有什么问题,我不明白。 - Pentium10
嗯,正如Mark Byers在他的评论中所暗示的那样,这段代码看起来相当奇怪。如果没有查看整个上下文的话,很难进行评估,但就您最初的问题而言,'instanceof'是您想要的。我希望这个答案能够帮助到您。 - polygenelubricants
注意:只有在将对象复制到对象之前,该对象是字符串或整数时,此方法才有效。例如:`Obj num = "1";` `boolean isnum = num instanceof Integer;` `return isnum;`将返回false。 - tricknology
1
这是一个老问题,但我正在遇到此问题,据我所知 instanceof 是一种糟糕的代码味道。我知道 visitor 模式存在,但我不确定它是否真正适用于这里,因为您无法向 Integer 和 String 添加访问方法。所以我想知道,是否认为这是一个好解决方案,或者有没有避免使用 instanceof 的方法? - jundl77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接