【问题标题】:Java/Scala interoperabilityJava/Scala 互操作性
【发布时间】:2015-07-08 22:15:34
【问题描述】:

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

谈到收藏和您在 Scala 中可能拥有的所有好东西。您宁愿在您的类中创建一些特定于 Java 的方法,还是在某种程度上符合单一职责原则,您将创建一堆静态对象,提供使用显式转换在 Scala 版本中转换对象的方法,asJava。

如果有一种方法可以从 Java 中转换 asJava 会更容易,但我不知道是否可以在 Java 中使用该显式转换包。我怀疑,因为我觉得它使用类型类来增强功能。

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

【问题讨论】:

  • 这不会是微不足道的。但如果我要开始研究这样的库,我会看看像 Akka 和 Kafka 这样的主要库是如何做到的。在高层次上,它们往往有一个单独的 javadslscaladsl 包,这样您不仅可以使用这些库,而且 API 也适用于每种语言,发挥每种语言的优势。

标签: java scala


【解决方案1】:

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

就我个人而言,我会说你应该在你想要暴露给 Java 的位上引入瘦包装器,它不使用任何花哨的 Scala 特性,比如隐式、函数对象(你实际上可以用 Java 8 构造替换那些)等等.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 2011-10-26
    • 2013-04-11
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2013-07-01
    相关资源
    最近更新 更多