Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中使用Java可选对象?_Java_Scala - Fatal编程技术网

如何在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]=

我必须在Scala中使用Java函数,它接受类型为
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))