如何在Scala中使用Java可选对象?
我必须在Scala中使用Java函数,它接受类型为如何在Scala中使用Java可选对象?,java,scala,Java,Scala,我必须在Scala中使用Java函数,它接受类型为Optional的参数,我必须传递给它的对象也来自Java库,但只是类型为类型。我如何在Scala中使用它 如果我这样打字可以吗。注意这里的javaObj来自一个Java库,属于type。但是ajavalibrary中定义的某些函数这里的函数需要一个类型为Optional的参数 import java.util.Optional .... //这里的javaObj是一种类型,来自Java库 val scalaObj:Optional[Type]=
Optional
的参数,我必须传递给它的对象也来自Java库,但只是类型为类型。我如何在Scala中使用它
如果我这样打字可以吗。注意这里的javaObj
来自一个Java库,属于type
。但是ajavalibrary中定义的某些函数这里的函数需要一个类型为Optional
的参数
import java.util.Optional
....
//这里的javaObj是一种类型,来自Java库
val scalaObj:Optional[Type]=javaObj.asInstanceOf[Optional[Type]]
//AjavaLibrary参数中定义的某些函数属于可选类型
val r=某个函数定义在某个AVALIBARY(scalaObj)中
一些(“abc”)。由于Scala选项
和Java可选
是不相关的类型,因此[Optional[String]]
的安装不起作用
您可以包括在类型之间进行转换(就像您可能熟悉的与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的类型为类型
,不是可选
,但函数要求可选
然后用Java做同样的事情(它不会自动将类型
框入可选
中):
您可以直接在Scala中使用所有Java API方法,包括可选。of
它应该是与Java中相同的1:1表达式:
someFunctionDefinedInAJavaLibrary(Optional.of(javaObj))
从Java API调用函数时,请忘记存在asInstanceOf
或scala.Option
如果您需要在Java的可选
和Scala的选项
之间进行转换,您可以使用(),但在这种特殊情况下不需要使用(),因为在任何地方都没有选项
。这里的问题是什么?可选创建是否失败?你不能进口吗?你在找自动转换吗?您是否尝试使用它并获得一些异常?目前还不清楚您在这里真正想要什么。什么是javaObj
?你为什么要把它打印出来?它与scala java interop有什么关系?如果它的类型是可选[type]
,那么您为什么要尝试将其类型转换为可选[type]
?每次编辑都会让你越来越不清楚你在问什么。您知道这样一个事实,即您可以在Scala代码中使用所有Java对象,而无需任何类型转换?如果javaObj已经是Java可选的,那么为什么您需要在将其发送到Java函数之前进行类型转换?它已经是正确的类型了。给我们一些失败用例中的实际代码,这样我们就可以理解您实际试图实现的目标。那么请提供一个实际错误,而不仅仅是一堆关于您认为可能导致错误的注释。我仍然不清楚Scala的选项
首先与这个问题有什么关系。使用Scala的纯java库时,似乎无法正确获取某些类型。
callJavaFunction(Optional.of(a))
someFunctionDefinedInAJavaLibrary(Optional.of(javaObj))