Maybes是scala的好模式吗?

时间:2010-06-01 00:57:06

标签: java scala null option maybe

有一段时间我一直在努力将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. 此功能是否隐藏了陷阱?

2 个答案:

答案 0 :(得分:8)

Scala的内置Option正是您要重新发明的目标。

在那种情况下:

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

答案 1 :(得分:1)

为什么要打扰一个完整的伴侣对象呢?它只是一个函数,因此您不需要将其实现为看起来像函数的对象。

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)
}