有一段时间,我一直在努力将Scala与可能返回null的Java方法集成在一起。我想出了以下实用程序,这有很大帮助:

// produce an Option, nulls become None
object Maybe {
    def apply[T](t:T) = if (t==null) None else Some(t)
}

Maybe(javaClass.getResultCouldBeNull()).map( result => doSomeWork(result) )

我对此解决方案有一些问题:

  1. 是否有更好或更多的标准模式可以使用?
  2. 我是否在复制已经存在的东西?
  3. 此功能是否隐藏了陷阱?
有帮助吗?

解决方案

Scala的内置 选项 是您要重塑的目的。

在这种情况下:

scala> val sOpt: Option[String] = Option(null)
sOpt: Option[String] = None

其他提示

为什么要从中制造整个伴侣对象?它只是一个函数,因此您无需将其作为看起来像功能的对象实现。

object MyUtilities{
  // a whole bunch of other utilities that you use all over can also be put in this class.
  def maybe[T](t:T) = if (t==null) None else Some(t)
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top