为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Scala 中使用 Java Optional 对象?

如何在 Scala 中使用 Java Optional 对象?

扬帆大鱼 2022-09-07 17:47:10
我必须在Scala中使用Java函数,该函数接受类型的参数,并且我必须传递给它的对象也来自Java库,但只是类型 。如何在Scala中使用它?Optional<Type>Type可以吗,如果我像这样打字。请注意,此处来自 Java 库,类型为 。但是这里的函数需要一个类型的参数。javaObjTypesomeFunctionDefinedInAJavaLibraryOptional<Type>import java.util.Optional....// javaObj here is of type Type and comes from a Java libraryval scalaObj: Optional[Type] = javaObj.asInstanceOf[Optional[Type]]// someFunctionDefinedInAJavaLibrary's argument is of type Optional<Type>val r = someFunctionDefinedInAJavaLibrary(scalaObj)
查看完整描述

2 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

它应该是字面上的1:1,与Java中的表达式相同:

someFunctionDefinedInAJavaLibrary(Optional.of(javaObj))

只要忘记这一点,或者在从Java-API调用函数时存在。asInstanceOfscala.Option


如果你曾经必须在Java和Scala之间进行实际转换,你可以使用scala-java8-compatmaven central),但在这种特殊情况下没有必要,因为任何地方都没有。OptionalOptionOption


查看完整回答
反对 回复 2022-09-07
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

Some("abc").asInstanceOf[Optional[String]]不起作用,因为Scala和Java是不相关的类型。OptionOptional


您可以包含一个 Java8 兼容性库来在类型之间进行转换(就像您可能熟悉的 Java 集合兼容的库一样),或者只是手动执行此操作。


 def toJavaOptional[A](maybeA: Option[A]): Optional[A] = 

    maybeA.fold(Optional.empty)(a => Optional.of(a))


 def toScalaOption[A](maybeA: Optional[A]): Option[A] =

    if (maybeA.isEmpty) None else Some(maybeA.get)

javaObj 的类型不是 ,但函数期望TypeOptional<Type>Optional<Type>


然后做你在Java中会做的事情(它不会自动“box”a到任何一个中):TypeOptional<Type>


callJavaFunction(Optional.of(a)) 

您可以直接在 Scala 中使用所有 Java API 方法,包括 .Optional.of


查看完整回答
反对 回复 2022-09-07
  • 2 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信