何时使用Option#或Null

MyT*_*tle 3 scala scala-option

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

所以让我们来看看代码.我有课

case class User (name: String)
Run Code Online (Sandbox Code Playgroud)

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

问题是一些标准的Scala方法回到了我的身边Option.(在我的例子中,该IterableLike#find方法返回Option)

所以问题是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?
Run Code Online (Sandbox Code Playgroud)

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

Jea*_*art 8

您想要将您的地图映射Option[String]Option[User]:

val userName: Option[String] = myList.find(...)
val user: Option[User] = userName.map(n => User(n))
Run Code Online (Sandbox Code Playgroud)