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

标签 java scala scala-java-interop

我用 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/

相关文章:

java - 在 Java 中进行 SELECT 和比较或 DELETE 和 INSERT 更有效

java - 为什么我的背景图像没有显示在 FXML 中

java - 时间窗口变量的解释,尤其是到达时间

java - Spark Java - 无法获取 java.lang.String 的正确类标签

java - 从 Java Integer 到 Scala Int : toInt vs unbox? 的正确方法

java - Android中strings.xml字符串中的粗体字

java - 在 Scala 的案例类和类字段中使用 Optional 是否有代码味道?

scala - Scala中的隐式抽象类构造函数参数和继承

scala - 结构化流 - Foreach Sink

java - 我如何从 Java 反射性地获取 Scala 对象的字段?