我用 Scala 编写了一个 API。有几个入口点,我希望将 List[SomeTrait] 作为输入并返回 List[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
在对原始方法的调用中显式转换是因为它最终会陷入一个无限循环调用自身。
这是我第一次尝试发布和回答我自己的问题...如果我错过了一些标准的方法,我深表歉意。它似乎值得分享,也值得公开讨论更好的方法,因为我对 Scala 还很陌生。
编辑 更新代码以反射(reflect)@Luigi Plinge 的建议
关于java - 当需要 Scala 的列表时,使用 java.util.List 从 Java 调用 Scala 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360485/