假设您有一个 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/