为什么 null 被称为“每个引用类型的子类型”?

发布于 2024-09-14 09:42:35 字数 340 浏览 2 评论 0原文

伙计们,有人可以对我在这本书中遇到的短语给出一个合乎逻辑的解释吗? :

您可能会发现思考 有帮助吗?将 T 扩展为包含由下面的 null 类型和上面的 T 类型界定的区间内的每个类型(其中 null 的类型 是每个引用类型的子类型)。

谢谢。

Guys, could any one give a logical explanation of phrase I met in this book:

You may find it helpful to think of ? extends T as containing every type in an interval bounded by the type of null below and by T above (where the type of null is a subtype of every reference type).

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

扭转时空 2024-09-21 09:42:35

我认为这只是意味着您可以将空引用分配给任何引用类型。在我看来,这并不是一种非常有帮助的思考方式。

Java 语言规范对 null 类型有这样的说法(在 第 4.1 节):

还有一种特殊的 null 类型,
表达式 null 的类型,其中有
没有名字。因为null类型没有
名称,无法声明
null 类型的变量或要强制转换的变量
到 null 类型。空引用
是唯一可能的值
null 类型的表达式。空值
引用始终可以转换为任何
参考类型。在实践中,
程序员可以忽略 null 类型
并假装 null 只是一个
可以是任何特殊文字
参考类型。

I think it just means that you can assign the null reference to any reference type. It doesn't strike me as a terribly helpful way of thinking about it.

The Java Language Specification has this to say about the null type (in section 4.1):

There is also a special null type, the
type of the expression null, which has
no name. Because the null type has no
name, it is impossible to declare a
variable of the null type or to cast
to the null type. The null reference
is the only possible value of an
expression of null type. The null
reference can always be cast to any
reference type. In practice, the
programmer can ignore the null type
and just pretend that null is merely a
special literal that can be of any
reference type.

随风而去 2024-09-21 09:42:35

类型形成偏序,即对于程序中所有类型集合中的任何两个类型,它们之间可能存在关系(即 T1 < T2 - T2 在某些情况下是 T1 的子类型)感觉)。不相关的类层次结构中的事物没有定义这种关系。

基本上,这告诉您的是 类型集的所有成员? extends T 描述小于 T 且大于 null。 null 作为所有内容的子类型存在,因为将值 null 分配给引用始终有效。

更正式地说:

∀x ∈ ? extends T. null ≥ x ≥ T

Types form a partial order, i.e. for any two types in the set of all types in the program, there might be a relation between them (i.e. T1 < T2 - T2 is a subtype of T1 in some sense). Things in unrelated class hierarchies have no such relation defined.

So basically what this is telling you is that all members of the set of types that ? extends T describes is less than T and greater than null. null exists as a subtype of everything because it is always valid to assign the value null to a reference.

More formally:

∀x ∈ ? extends T. null ≥ x ≥ T
萤火眠眠 2024-09-21 09:42:35

摘自这篇有趣的文章

Java有null类型。 JLS3 之前,
null 类型不是正式的
任何类型的子类型,以及 null
参考不是正式的值
除 null 类型之外的任何类型。一个
法令将引用设为空
可转换为任何引用类型
务实的原因。 (这类似于
制定名单的法令
可分配给列表形式
即使 List 不是参数
列表的子类型。你知道
法令作为捕获转换。)JLS3
将 null 类型定义为以下类型的子类型
每种类型,所以看起来非常多
就像底部一样。

From this interesting article, an excerpt:

Java has the null type. Pre-JLS3, the
null type was not officially the
subtype of any type, and the null
reference was not officially a value
of any type except the null type. A
decree made the null reference
castable to any reference type for
pragmatic reasons. (This is similar to
the decree that makes List
assignable to a List formal
parameter even though List is not a
subtype of List. You know the
decree as capture conversion.) JLS3
defines the null type as a subtype of
every type, so it looks an awful lot
like Bottom.

听你说爱我 2024-09-21 09:42:35

这意味着 null 可以是任何类型。

您可能有一个类 Animal 和一个子类 Dog
如果您有一个 Animal 类型的变量,其值为 null,您无法判断 null 是否属于 Animal 类型> 或输入 Dog。两者同样有效。

That means that null can be any type.

You might have a class Animal with a subclass Dog.
If you have a variable of type Animal with the value null you can not tell if the null is of type Animal or type Dog. Both are equally valid.

街角迷惘 2024-09-21 09:42:35
null instanceof T

对于任何类型 T 都成立。

null instanceof T

is true for any type T.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文