Maybes是Scala的好模式吗?
题
有一段时间,我一直在努力将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) )
我对此解决方案有一些问题:
- 是否有更好或更多的标准模式可以使用?
- 我是否在复制已经存在的东西?
- 此功能是否隐藏了陷阱?
解决方案
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)
}
不隶属于 StackOverflow