是否有 scala 编译器选项使 `Option[T](t).map(x => null)` return None 而不是 Some(null)
Is there scala compiler option that makes ` Option[T](t).map(x => null)` return None instead of Some(null)
我有由 java 和 scala 组成的企业多语言代码库。
我们有很多地方在 Option[T]
上执行映射函数,映射函数是遗留代码,return 为空。
Option(2).map(x => null)
returns Some(null)
。当对结果应用另一个高阶函数时,它会抛出 NullPointerException。
作为解决方法,我们Option[T](t).map(x => Option(mapping(x)))
是为了得到这个结果None
。它正在慢慢变成代码味道。
我正在尝试查看是否有更好的方法来执行此操作,或者当自动进行这样的调用时 return None
是否有 scala 编译器选项 Option[T](t).map(x => null)
.
我个人认为您的解决方法没有什么问题,因为您必须使用 API 的遗留 return null 但您必须像这样对其进行平面映射
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
的执行发生在 运行 时,因此编译器无法在编译时提前预测结果以自动重写它。
我有由 java 和 scala 组成的企业多语言代码库。
我们有很多地方在 Option[T]
上执行映射函数,映射函数是遗留代码,return 为空。
Option(2).map(x => null)
returns Some(null)
。当对结果应用另一个高阶函数时,它会抛出 NullPointerException。
作为解决方法,我们Option[T](t).map(x => Option(mapping(x)))
是为了得到这个结果None
。它正在慢慢变成代码味道。
我正在尝试查看是否有更好的方法来执行此操作,或者当自动进行这样的调用时 return None
是否有 scala 编译器选项 Option[T](t).map(x => null)
.
我个人认为您的解决方法没有什么问题,因为您必须使用 API 的遗留 return null 但您必须像这样对其进行平面映射
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
的执行发生在 运行 时,因此编译器无法在编译时提前预测结果以自动重写它。