Null、Nil 和 Nothing 之间有什么区别?

Lin*_*air 8 scala

我正在学习 Scala 并且对下一个类型之间的差异感到有些困惑:“Null”、“Nil”和“Nothing”。

有人可以帮我解释一下区别吗?据我所知,“Nil”用于描述一个空列表。

Jan*_*ena 12

Scala 中的虚无

有 7 种情况您想在 Scala 中表示虚无的概念。

Nil- 用于表示空列表或零长度的集合。对于集合,您可以使用Set.empty

None- Optional 类型的两个子类之一,另一个是Some. Scala 集合很好地支持。

Unit- 相当于 Java 的void,用于没有返回类型的函数

Nothing- 一个特质。它是所有其他类型的子类型,但没有任何超类型。它就像一棵树的叶子。没有 Nothing 的实例。

Null- 一个特质。不推荐使用。

null- trait 的一个实例,与 Java 类似Null。不推荐使用。

最佳实践

  • 如果您有返回 null 的代码,请将其更改为返回 Optional。
  • 如果你需要一个未初始化的变量,使用 Optional,或者一个空的列表/集合而不是 null
  • *

有关最佳实践建议,请参阅https://alvinalexander.com/scala/scala-null-values-option-uninitialized-variables

为什么 null 如此讨厌?


小智 0

在scala中null确实很糟糕,你必须使用Optional[T].

我们有Nil一个空列表,可以1 :: Nil创建一个仅包含1.

并且,Nothing是每种类型的子类型。在另一个世界中,是一个代表着的物体null

  • “Nothing”并不“代表”null,没有“Nothing”类型的值。 (3认同)