【问题标题】:boolean.isInstance(true) is false?boolean.isInstance(true) 是假的吗?
【发布时间】:2016-06-27 22:17:30
【问题描述】:
问题
布尔字段的类对象不将其他布尔值识别为实例。
代码
public class Test {
public boolean b;
public static void main(String[] args) {
System.out.println(Test.class.getFields()[0].getType().isInstance(true));
}
}
结果
false
【问题讨论】:
标签:
java
class
reflection
field
instance
【解决方案1】:
方法是isInstance(Object)所以
x.isInstance(true)
与
相同
x.isInstance(Boolean.TRUE);
并且 Boolean.class 不是 boolean.class 的子类。
注意:原语没有getClass() 方法,或任何与此相关的方法。当你可以将它作为一个Object使用时,它已经被装箱了。
【解决方案2】:
来自Class#isInstance(Object obj)的文档
...如果这个Class对象代表一个原始类型,这个方法返回false。
请注意,预期的参数总是Object,这意味着它总是某个类的实例(不包括原始类型)。
即使你在这里传递原始类型,它也会被自动装箱到它的包装类,但这样的包装类与Class 表示的原始类型不同,在你的情况下由getType() 返回。