[英]Why null was called “a subtype of every reference type”?
我認為這只是意味着您可以將空引用分配給任何引用類型。 它並沒有讓我想到這種非常有用的方法。
Java語言規范對空類型(在4.1節中 )說了這句話:
還有一個特殊的null類型,即表達式null的類型,它沒有名稱。 由於空類型沒有名稱,因此無法聲明空類型的變量或將其強制轉換為空類型。 空引用是空類型表達式的唯一可能的值。 空引用始終可以轉換為任何引用類型。 在實踐中,程序員可以忽略null類型,而假裝null只是可以是任何引用類型的特殊文字。
類型形成部分順序,即對於程序中所有類型集中的任何兩個類型,它們之間可能都有關系(即T1 < T2
T2在某種意義上是T1的子類型)。 不相關的類層次結構中的事物未定義此類關系。
那么,基本上,這告訴您的是那組類型的所有成員? extends T
? extends T
描述的值小於T
且大於null
。 null作為所有內容的子類型存在,因為將null
值分配給引用始終是有效的。
更正式地:
∀x ∈ ? extends T. null ≥ x ≥ T
從這篇有趣的文章中摘錄:
Java具有null類型。 在JLS3之前的版本中,空類型不是正式的任何類型的子類型,並且空引用不是形式上除空類型之外的任何形式的值。 出於實用原因,一項法令將空引用強制轉換為任何引用類型。 (這類似於使List可分配給List形式參數的法令,即使List不是List的子類型。您也知道該法令是捕獲轉換。)JLS3將空類型定義為每種類型的子類型,因此看起來像Bottom這樣的可怕。
這意味着null可以是任何類型。
您可能有Animal
類和子類Dog
。 如果您有一個類型為Animal
的變量,其值為null
,則無法確定該null
是Animal
類型還是Dog
類型。 兩者同等有效。
null instanceof T
對於任何T類型都是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.