伙计们,任何人都可以对我在this book中遇到的短语给出合乎逻辑的解释:
您可能会发现将
? extends T
视为包含以下null
类型和T
类型所限定的区间中的每种类型(其中类型为null
是每种参考类型的子类型。)。
感谢。
答案 0 :(得分:4)
我认为这只是意味着您可以将null引用分配给任何引用类型。它并没有让我觉得这是一种非常有用的思考方式。
Java语言规范有关空类型(section 4.1):
的说法还有一个特殊的null类型 表达式的类型为null,具有 无名。因为null类型没有 名字,不可能申报 null类型的变量或者要转换 到null类型。空引用 是唯一可能的价值 null类型的表达式。 null 引用总是可以转换为任何引用 参考类型。在实践中, 程序员可以忽略null类型 并假装null只是一个 可以是任何特殊文字 参考类型。
答案 1 :(得分:2)
类型形成部分顺序,即对于程序中所有类型集合中的任何两种类型,它们之间可能存在关系(即T1 < T2
- T2在某种意义上是T1的子类型)。不相关的类层次结构中的事物没有定义这样的关系。
所以基本上告诉你的是? extends T
描述的那组类型的所有成员都小于T
且大于null
。 null作为所有内容的子类型存在,因为将值null
赋给引用始终有效。
更正式:
∀x ∈ ? extends T. null ≥ x ≥ T
答案 2 :(得分:2)
来自this interesting article,摘录:
Java具有null类型。 Pre-JLS3 ,. null类型不是正式的 任何类型的子类型,以及null 参考不是正式的价值 除null类型之外的任何类型。一个 法令提出了空引用 可转换为任何引用类型 务实的原因。 (这类似于 制定名单的法令 可分配给正式的List 参数即使List不是a 列表的子类型。你知道 法令作为捕获转换。)JLS3 将null类型定义为的子类型 各种类型,所以它看起来很糟糕 像Bottom。
答案 3 :(得分:0)
这意味着null可以是任何类型。
您可能有一个类Animal
,其子类为Dog
。
如果您的Animal
类型的变量的值为null
,则无法判断null
是Animal
类型还是类型Dog
。两者都同样有效。
答案 4 :(得分:-1)
null instanceof T
适用于任何类型的T。