<
Scala 中对「空」的表示
>
上一篇

想法
下一篇

一见倾心的 Scala I/O 开源库:Better-Files(官方文档翻译)

在 Java 中,null 是许多 Bug 的来源,一方面,null 并不是任何值或者类的实例,对 null 的任何调用都将抛出空指针异常(NullPointerException),另一方面 Java 程序员对于不返回值返回 null 的想法根深蒂固。这就导致在操作 Java API 时,经常由于忘记检查是否为空而导致程序崩溃,实在是一种不优雅的行为。而 Scala 就提供了优雅又易用的「空」,解决了这个苦恼的问题。

void 的代替

首先,Scala 摒弃了 Java 中如果方法没有返回值就返回 null 的规定,采用不会引发空指针异常的 Unit 代替:

Unit

( )

真正的大显身手

Unit 替代了返回类型 void,但绝大多数情况我们的方法是有返回值的,而且经常是可能有,也可能没有的情况,那么 None 就派上用场了,不过在此之前,我们先要了解 Nothing 这个特殊的类型:

Nothing

对于其他集合,Scala 也提供了对应的空集合单例对象/获取方法:

Nil[A]

Empty[A]

*.empty[A]

与 Java 的互操作

作为 JVM 语言,Scala 提供了与 Java 互操作的类型 Null,以及相应实例 null,并作为关键字以便 Scala 开发者能更好处理两种代码之间的协作问题:

Null

null

不过其实对于 Java 代码返回的 Null,Option 类提供了一个构造方法 def apply[A](x: A): Option[A] = if (x == null) None else Some(x) 可以将 Java 传过来的可空对象转化为更易使用的 Option 对象。这下可以愉快的使用来自 Java 的 API 了。

Top
Foot