何时使用Option#或Null

时间:2015-04-16 19:08:14

标签: scala scala-option

据我所知,我们应该避免在Scala中使用null。如果某些字段在逻辑上不具有“无价值”,那么我们不应使用Option来避免过度使用Option

让我们来看看代码。 我有课

case class User (name: String)

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

问题是一些标准的Scala方法返回给我Option。 (在我的例子中,IterableLike#find方法返回选项)

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

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几乎相同。

2 个答案:

答案 0 :(得分:8)

您希望将Option[String]映射到Option[User]

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

答案 1 :(得分:2)

orNull主要用于Java互操作性。在许多Java库中使用null作为标记值是普遍存在的,orNull是一小段语法糖。基本上它只是myOption.getOrElse(null),但功能名称允许更清晰的代码。

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