【问题标题】: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() 返回。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 2013-06-11
        • 1970-01-01
        • 2014-08-02
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多