繁体   English   中英

TypeUtils说“ null”是“ Object.class”的实例吗?

[英]TypeUtils says “null” is instance of “Object.class”?

关于以下代码, org.apache.commons.lang3.reflect.TypeUtilsnullObject.class 这不正确吗?

public static void main(String args[]) {

    Boolean bool = null;

    if (TypeUtils.isInstance(bool, Object.class)) {
        System.out.println("bool isInstance Object-true");
    } else {
        System.out.println("bool isInstance Object-false");
    }


}

这是正确的。 函数的文档说明如下:

检查是否可以按照Java泛型规则将给定值分配给目标类型。

并且由于可以将null分配给Object类型的变量,因此返回true。

没有该文档,我认为您是正确的,因为null表示没有实例,无论类型如何。

这是预期的行为( https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/reflect/TypeUtils.html#isInstance(java.lang.Object,%20java.lang。 Reflection.Type)

该方法只是检查是否可以将null分配给Object,我猜它将返回true。

我同意你的看法。 isInstance()方法具有误导性。 它应该是isAssignable()因为文档指出了它:

检查是否可以按照Java泛型规则将给定值分配给目标类型。

而且null不是Object类的实例,因为null不是实例。

但是根据文档,您的结果是准确的,因为可以将null分配给任何对象类型。 当您查看实现时,可以看到代码调用了isAssignable()方法:

public static boolean isInstance(final Object value, final Type type) {
    if (type == null) {
        return false;
    }

    return value == null ? !(type instanceof Class<?>) || !((Class<?>) type).isPrimitive()
            : isAssignable(value.getClass(), type, null);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM