[英]TypeUtils says “null” is instance of “Object.class”?
关于以下代码, org.apache.commons.lang3.reflect.TypeUtils
说null
是Object.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
表示没有实例,无论类型如何。
该方法只是检查是否可以将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.