Null,Nil和Nothing有什么区别?

时间:2017-10-17 17:39:57

标签: scala

我正在学习Scala,并且对下一种类型之间的区别感到有些困惑:' Null'' Nil'并且没有什么'

有人可以帮我解释一下这个区别吗? 从我收集到的," Nil"用于描述空列表。

2 个答案:

答案 0 :(得分:1)

Scala中什么都没有

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

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

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

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

Nothing-特质。它是所有其他类型的子类型,但是什么都不是的父类型。它就像一棵树的叶子。没有Nothing的实例。

Null-特质。不建议使用。

null-特征的一个实例,类似于Java Null。不建议使用。

最佳做法

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

有关最佳做法的建议,请参见https://alvinalexander.com/scala/scala-null-values-option-uninitialized-variables

为什么null如此令人讨厌?

答案 1 :(得分:0)

在scala中null真的很糟糕,你必须使用Optional[T]

我们有Nil这是一个空列表,可以1 :: Nil创建仅包含1的列表。

而且,Nothing是每种类型的子类型。在其他世界中,是一个代表null的对象。