Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
Java 当Scala';预计将有一份清单_Java_Scala_Scala Java Interop - Fatal编程技术网

Java 当Scala';预计将有一份清单

Java 当Scala';预计将有一份清单,java,scala,scala-java-interop,Java,Scala,Scala Java Interop,我已经用Scala编写了一个API。这里有几个入口点,我希望输入一个列表[SomeTrait],然后返回一个列表[OtherTrait] 我将该Jar包含在Java项目中以供使用,并在尝试将Java.util.List传递给需要Scala的List对象的方法时遇到问题。我意识到它们不一样,Java不知道如何进行转换。那么,如何在不期望Java调用方传入Scala列表的情况下实现这一点呢?我很想听到其他建议,但这是我找到的解决方案,我在Google上找不到它 如果我的普通Scala入口点是一个类似

我已经用Scala编写了一个API。这里有几个入口点,我希望输入一个列表[SomeTrait],然后返回一个列表[OtherTrait]


我将该Jar包含在Java项目中以供使用,并在尝试将Java.util.List传递给需要Scala的List对象的方法时遇到问题。我意识到它们不一样,Java不知道如何进行转换。那么,如何在不期望Java调用方传入Scala列表的情况下实现这一点呢?

我很想听到其他建议,但这是我找到的解决方案,我在Google上找不到它

如果我的普通Scala入口点是一个类似以下内容的方法:

def doSomething(things: List[Thing]): List[Result] = { ... }
//import scala.collection.JavaConversions._
import scala.collection.JavaConverters._

def doSomething(things: java.util.List[Thing]): java.util.List[Result] =
  doSomething(things.asScala.toList).asJava
我添加了另一种方法,如下所示:

def doSomething(things: List[Thing]): List[Result] = { ... }
//import scala.collection.JavaConversions._
import scala.collection.JavaConverters._

def doSomething(things: java.util.List[Thing]): java.util.List[Result] =
  doSomething(things.asScala.toList).asJava
对原始方法的调用中的显式转换是因为它将在调用自身的无限循环中结束

这是我第一次尝试发帖和回答我自己的问题……如果我错过了一些标准的方法,我深表歉意。这似乎是值得分享的,也值得讨论更好的方法,因为我对Scala非常陌生


编辑更新代码以反映@Luigi Plinge的建议

这正是我要发布的答案。您应该放弃
Java转换
,并使用
将结果转换回Java列表。对于Luigi的建议,请不要使用Java转换,使用JavaConverter和explicit.asJava/.asScala方法-隐式转换可以做一些奇怪的事情。另外,为了避免重载,请创建一个从Java调用的垫片/包装器。@Luigi Plinge-您应该将此作为一个答案,并附上他的代码的更新版本(没有隐式转换)。我真的在努力关注Scala的最佳实践。JavaConversions是一个值得远离的东西吗?这对我来说是有道理的。我更新了我的答案,以反映(并参考)路易吉的建议。不过,我更关心的是Java应该如何与Scala库交互@杰德维斯利·史密斯你能详细说明一下避免超载的建议吗?