簡體   English   中英

將null轉換為任何類型

[英]Casting null to any type

可以將null轉換為任何類型嗎? 即以下代碼是否有效

public <T> T foo(Object object){
    return (T) object;
}

Duck duck = foo(new Duck()); // this works

Duck duck2 = foo(null); // should this work?
Cat cat = foo(null); // should this work?

// if they are both null, should this be true?
boolean equality = duck2.equals(cat);

我的問題是,是null “澆注到什么”?

來自Javadocs:

還有一個特殊的null類型,表達式的類型為null,沒有名稱。 由於null類型沒有名稱,因此無法聲明null類型的變量或轉換為null類型。 空引用是null類型表達式的唯一可能值。 null引用始終可以強制轉換為任何引用類型。 實際上,程序員可以忽略null類型,只是假裝null只是一個可以是任何引用類型的特殊文字。

是的,這兩者都應該有效,但關鍵是你需要確保以后不要嘗試引用這些字段或方法。 (至少在你將這些變量分配給別的東西之前)

所有對象都繼承Object但由於您指定為null,因此實際上不會有您期望Object擁有的方法或字段。 因此,當您嘗試調用equals()時,您將在此處收到錯誤,因為null沒有您通常從對象繼承的方法。

您可以將聲明的變量賦值為null,如果在if語句中定義了實際值,則可以非常有用地防止編譯器錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM