mjj*_*iec 10 java scala scala-java-interop
我需要将Scala Option转换为Java Optional.我设法写了这个:
public <T> Optional<T> convertOption2Optional(Option<T> option) {
return option.isDefined() ? Optional.of(option.get()) : Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)
但我不喜欢它.
有一个简单的方法,或内置的scala转换器?我正在寻找类似的东西:
Options.asJava(option);
Run Code Online (Sandbox Code Playgroud)
Xav*_*hot 14
首先Scala 2.13
,有一个从 scalaOption
到 java 的专用转换器Optional
。
从 Java(显式方式):
import scala.jdk.javaapi.OptionConverters;
// val option: Option[Int] = Some(42)
OptionConverters.toJava(option);
// java.util.Optional[Int] = Optional[42]
Run Code Online (Sandbox Code Playgroud)
从 Scala(隐式方式):
import scala.jdk.OptionConverters._
// val option: Option[Int] = Some(42)
option.toJava
// java.util.Optional[Int] = Optional[42]
Run Code Online (Sandbox Code Playgroud)
Dic*_*ici 10
我能用Java思考的最短路径是:
Optional.ofNullable(option.getOrElse(null))
Run Code Online (Sandbox Code Playgroud)
如果你在Scala中编写转换,@RégisJean-Gilles实际上建议更短:
Optional.ofNullable(option.orNull)
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在Scala 2.12尚未正式发布之前,你必须知道Scala不支持Java 8.查看文档(可能会在发布之前发生变化),没有这样的转换JavaConversions
.
asJava
现在有解决方案!可从下载2.10
。
例:
import scala.compat.java8.OptionConverters._
class Test {
val o = Option(2.7)
val oj = o.asJava // Optional[Double]
val ojd = o.asPrimitive // OptionalDouble
val ojds = ojd.asScala // Option(2.7) again
}
Run Code Online (Sandbox Code Playgroud)
更多细节在这里。
归档时间: |
|
查看次数: |
12247 次 |
最近记录: |