我需要从 Scala 访问大量 Java 接口(interface)。这些接口(interface)有可能返回 Null 的方法,我想将它们转换为 Option[T]
我找到了其他描述 Option.apply()
的答案,比如这些
How to implicitly wrap a value that can be null or an array into an Scala Option
但是,这需要我为每个 Java 接口(interface)手动创建一个 Scala 包装器。像这样...
class ScalaFoo extends JavaFoo {
def bar = Option(super.bar)
}
这看起来很乱,难以维护,而且容易出错。我不想要所有那些什么都不做的额外代码,我想自动包装我所有的 Java 接口(interface),这样如果一个改变,包装器也会改变。
当然,有一种方法可以用隐式来做到这一点,不是吗?
最佳答案
我最近结束了这样的事情:
object Implicits {
implicit class ConvertToOption[T](t: T) {
def optional = Option(t)
}
}
用法:
假设您有以下 Java 接口(interface):
public interface Fooable {
public String getFoo();
}
public class Foo implements Fooable {
public String getFoo() {
return null;
}
}
在你的 Scala 代码中:
import Implicits._
val foo = new Foo()
val myOptionalValue = foo.getFoo.optional //returns an Option[String], in this case None because getFoo returns null
关于java - Java Null 的隐式包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22130558/