何时使用 Option#orNull

When to use Option#orNull

据我所知,我们应该避免在 Scala 中使用 null。如果某些字段在逻辑上没有 "no-value" 那么我们不应该使用 Option 以避免过度使用 Options.

所以让我们看看代码。 我有 class

case class User (name: String)

并且我 100% 确定 name 字段不能是 null,因此我只使用 String 而不是 Option[String]

问题是一些标准的 Scala 方法 return 对我来说 Options。 (在我的例子中 IterableLike#find 方法 returns 选项)

所以问题是当我将 name 包装到 Option 时如何创建 User 实例? 要清楚一点,这是代码:

val userName: Option[String] = myList.find(...)
val user = User(userName.get) // or may be I should use userName.orNull ? or throw exception?

听说Option.get不是优雅的解决方案。 orNull方法几乎与get相同。

您想将 Option[String] 映射到 Option[User]:

val userName: Option[String] = myList.find(...)
val user: Option[User] = userName.map(n => User(n))

orNull 主要用于 Java 互操作性。在许多 Java 库中,null 作为标记值的使用很普遍,orNull 用作一小块语法糖。本质上它只是 myOption.getOrElse(null) 但函数名称允许稍微更简洁的代码。

在纯 Scala 项目中使用 orNull 至少可以说是奇怪的。