我在 Scala 中编写了一个 API。有几个入口点,我期望 List[SomeTrait] 作为输入并返回 List[OtherTrait]。
我将该 Jar 包含在 Java 项目中以供使用,并在尝试将 java.util.List 传递给期望 Scala 的 List 对象的方法时遇到问题。我意识到它们不一样,Java 不知道如何进行转换。那么,如何在不期望 Java 调用者传入 Scala 列表的情况下完成这项工作?
我在 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 还很陌生。
编辑更新代码以反映@Luigi Plinge 的建议