Java/Scala 互操作性

标签 java scala

假设您有一个 Scala 库,您的 Java 程序需要使用它,但不仅仅是在将来。

当涉及到 Scala 中的 Collection 和所有好东西时。您是否愿意在您的类中创建一些特定于 Java 的方法,或者在某种程度上符合单一责任原则,您可以创建一堆静态对象,这些对象提供使用显式转换(asJava)在 Scala 版本中转换对象的方法。

如果有一种从 Java 内部转换 asJava 的方法,那就容易多了,但我不知道是否可以在 Java 内部使用该显式转换包。我对此表示怀疑,因为我觉得它使用类型类来增强功能。

Java 有什么可以提供帮助的吗?这里的最佳实践是什么?

最佳答案

从 Java 调用 Scala 代码通常比从 Java 调用 Scala 代码要复杂得多。如果您引用 Scala 标准库,实际上也可以使用 Java 中的 asJava 。至于类型类,它们实际上只是编译器自动替换的隐式类型。显然,在 Java 中没有隐式,因此您需要自己传递正确的实例(这有点麻烦但可行)。下面是一个示例(它将 Java 映射转换为 Scala 映射,但反之亦然,其工作原理应该类似):Convert java.util.HashMap to scala.collection.immutable.Map in java .

我个人认为你应该在你想要暴露给 Java 的位上引入瘦包装器,它不使用任何花哨的 Scala 功能,比如隐式、函数对象(你实际上可以用 Java 8 构造来替换它们)等等.

关于Java/Scala 互操作性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304782/

相关文章:

java - 链表复制构造函数

java - 如何连接到 Web 服务(启用 SSL 和代理接口(interface))

java - xpath 表达式检查属性值失败

scala - Play 框架和 Slick 自动数据库创建

scala - 如何在 IntelliJ IDEA 14.0.x 中定义/安装 Scala Facet?

java - 动态加载osgi包中的类

java - Java 中的 C 格式说明符 "%n"

java - JSoup 摆脱正文中的换行符

scala - 隐式超出 Spray 示例代码 : what's happening here? 的范围

regex - 用于模式匹配的参数化正则表达式