如何解决是否有Scala编译器选项使`Option[T](t).map(x => null)`返回None而不是Some(null)
我们有很多地方在 Option[T]
上执行映射函数,而映射函数是返回 null 的遗留代码。
Option(2).map(x => null)
返回 Some(null)
。当另一个高阶函数应用于结果时,它会抛出 NullPointerException。
作为一种解决方法,我们执行 Option[T](t).map(x => Option(mapping(x)))
以使此结果 None
。它正在慢慢变成代码味道。
我想看看是否有更好的方法来做到这一点,或者当像这样的调用 None
自动进行时,Scala 编译器选项返回 Option[T](t).map(x => null)
。
解决方法
就我个人而言,我认为您的解决方法没有太大问题,因为您必须使用返回 null 的旧 API,但您必须像这样对其进行平面映射
Option(t).flatMap(x => Option(legacyJavaFunc(x)))
您可以投资一个 Scala 包装层来处理幕后的空值和异常,这样您就不必直接调用 Java API
// Scala API layer over Java API
def scalaFunc[T](t: T): Option[T] = Option(legacyJavaFunc(t))
// so we can avoid calling Java API directly
Option(t).flatMap(scalaFunc)
legacyJavaFunc
的执行发生在运行时,因此编译器无法在编译时提前预测结果以自动重写。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。