scalac—是否有scala编译器选项使`option[t](t).map(x=>null)`返回none而不是some(null)

xqkwcwgp  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(274)

我有一个企业多语言代码库,它是由java和scala组成的。
我们有很多地方在上面做Map功能 Option[T] Map函数是返回null的遗留代码。 Option(2).map(x => null) 退货 Some(null) . 当对结果应用另一个高阶函数时,它抛出nullpointerexception。
作为一种解决方法 Option[T](t).map(x => Option(mapping(x))) 为了得到这个结果 None . 它正在慢慢变成代码气味。
我想看看是否有更好的方法来实现这一点,或者是否有scala编译器选项返回 None 当这样的电话 Option[T](t).map(x => null) 是自动制造的。

abithluo

abithluo1#

就我个人而言,我不认为你的解决方法有什么错,因为你必须使用返回null的遗留api,但你必须像这样平面Map它

Option(t).flatMap(x => Option(legacyJavaFunc(x)))

您可以投资scala Package 层,它在幕后处理空值和异常,这样就不必直接调用javaapi

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

相关问题