我需要从
Scala访问大量
Java接口.这些接口有可能返回Null的方法,我想将它们转换为Option [T]
我找到了像这样描述Option.apply()的其他答案
How to implicitly wrap a value that can be null or an array into an Scala Option
但是,这要求对于每个Java接口,我手动创建一个Scala包装器.像这样…
class ScalaFoo extends JavaFoo { def bar = Option(super.bar) }
这似乎很乱,很难维护,容易出错.我不希望所有那些无效的额外代码,我想自动包装所有Java接口,这样如果一个更改,包装器也会改变.
当然,有一种方法可以用implicits做到这一点,不是吗?
解决方法
我最近最终得到了这样的东西:
object Implicits { implicit class ConvertToOption[T](t: T) { def optional = Option(t) } }
用法:
假设您有以下Java接口:
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