簡體   English   中英

為什么將null稱為“每個引用類型的子類型”?

[英]Why null was called “a subtype of every reference type”?

伙計們,任何人都可以對我在本書中遇到的句話進行合乎邏輯的解釋:

您可能會覺得有幫助? extends T ? extends T為包含每個類型,並在一定? extends T包含一個以下類型的null ,該間隔受以下null類型的約束和上方T約束(其中null類型是每個引用類型的子類型 )。

謝謝。

我認為這只是意味着您可以將空引用分配給任何引用類型。 它並沒有讓我想到這種非常有用的方法。

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 ,則無法確定該nullAnimal類型還是Dog類型。 兩者同等有效。

null instanceof T

對於任何T類型都是如此。

暫無
暫無

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

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