关于以下代码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");
}
}
答案 0 :(得分:2)
这是对的。 function's documentation说明如下:
检查是否可以将给定值分配给以下目标类型 Java泛型规则。
由于您可以将null
分配给Object
类型的变量,因此返回true。
如果没有该文档,我认为你是正确的,因为null
表示没有实例,无论类型如何。
答案 1 :(得分:1)
该方法只是检查是否可以为Object分配null,它会返回true我猜。
答案 2 :(得分:1)
我同意你的看法。 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);
}