当需要Scala的List时,使用java.util.List从Java调用Scala代码

时间:2012-09-10 22:46:27

标签: java scala scala-java-interop

我在Scala中编写了一个API。有几个入口点,我期待List [SomeTrait]作为输入并返回List [OtherTrait]。

我将Java包含在Java项目中以供使用,并遇到一个问题,试图将java.util.List传递给期望Scala的List对象的方法。我意识到它们不一样,Java不知道如何进行转换。那么,如何在不期望Java调用者传入Scala列表的情况下完成这项工作呢?

1 个答案:

答案 0 :(得分:7)

我很乐意听到其他建议,但这是我找到的解决方案,我无法在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

对原始方法的调用中的显式转换是因为它将以无限循环调用自身。

这是我第一次尝试发布和回答我自己的问题...如果我错过了一些标准的方法,我会道歉。看起来它值得分享,也值得开放讨论更好的方法,因为我对Scala很新。

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