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

我必须在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 library

val scalaObj: Optional[Type] = javaObj.asInstanceOf[Optional[Type]]

// someFunctionDefinedInAJavaLibrary's argument is of type Optional<Type>

val r = someFunctionDefinedInAJavaLibrary(scalaObj)


扬帆大鱼
浏览 148回答 2
2回答

茅侃侃

它应该是字面上的1:1,与Java中的表达式相同:someFunctionDefinedInAJavaLibrary(Optional.of(javaObj))只要忘记这一点,或者在从Java-API调用函数时存在。asInstanceOfscala.Option如果你曾经必须在Java和Scala之间进行实际转换,你可以使用scala-java8-compat(maven central),但在这种特殊情况下没有必要,因为任何地方都没有。OptionalOptionOption

猛跑小猪

Some("abc").asInstanceOf[Optional[String]]不起作用,因为Scala和Java是不相关的类型。OptionOptional您可以包含一个 Java8 兼容性库来在类型之间进行转换(就像您可能熟悉的 Java 集合兼容的库一样),或者只是手动执行此操作。&nbsp;def toJavaOptional[A](maybeA: Option[A]): Optional[A] =&nbsp;&nbsp; &nbsp; maybeA.fold(Optional.empty)(a => Optional.of(a))&nbsp;def toScalaOption[A](maybeA: Optional[A]): Option[A] =&nbsp; &nbsp; if (maybeA.isEmpty) None else Some(maybeA.get)javaObj 的类型不是 ,但函数期望TypeOptional<Type>Optional<Type>然后做你在Java中会做的事情(它不会自动“box”a到任何一个中):TypeOptional<Type>callJavaFunction(Optional.of(a))&nbsp;您可以直接在 Scala 中使用所有 Java API 方法,包括 .Optional.of
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java