opu*_*111 7 java null scala implicit
我需要从Scala访问大量Java接口.这些接口有可能返回Null的方法,我想将它们转换为Option[T]
我找到了其他Option.apply()
类似的答案
但是,这要求对于每个Java接口,我手动创建一个Scala包装器.像这样...
class ScalaFoo extends JavaFoo {
def bar = Option(super.bar)
}
Run Code Online (Sandbox Code Playgroud)
这似乎很乱,很难维护,容易出错.我不希望所有那些无效的额外代码,我想自动包装所有Java接口,这样如果一个更改,包装器也会改变.
当然,有一种方法可以用implicits做到这一点,不是吗?
我最近得到了这样的结果:
object Implicits {
implicit class ConvertToOption[T](t: T) {
def optional = Option(t)
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
假设您有以下 Java 接口:
public interface Fooable {
public String getFoo();
}
public class Foo implements Fooable {
public String getFoo() {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在您的 Scala 代码中:
import Implicits._
val foo = new Foo()
val myOptionalValue = foo.getFoo.optional //returns an Option[String], in this case None because getFoo returns null
Run Code Online (Sandbox Code Playgroud)