簡體   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