[英]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.