是否有 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 的执行发生在 运行 时,因此编译器无法在编译时提前预测结果以自动重写它。