2

作为一个实验,我正在为 Java 应用程序(客户端服务器、P2P 等)开发一个小型平台,我希望能够从 Java 和 Scala 中使用它。也可能来自 Groovy、jRuby 等。

我知道 Scala 可以很容易地调用 Java,但 Java 不能那么容易地回调 Scala。我不知道这在 jRuby 和 Groovy 中是如何工作的。

我最初的想法是用 Java 实现这个平台,然后看看我是否可以将它提供给其他语言。但是,平台可能包括启动线程,这些线程调用实现某些 Java 接口的组件。是否可以将例如在 Scala 中实现但实现 Java 接口的工厂传递给 Java 组件并让该 Java 组件调用 Scala 工厂?

对于实施这样的跨语言平台,您一般有什么建议?

4

3 回答 3

3

我绝不是专家,也从未做过这样的跨语言项目(只是较小的 Java/Scala)。

但我建议用以下语言实现它:

  • 你最清楚
  • 让你最有效率
  • 确保最大的可维护性

就我而言,它将是 Scala。

所以我要做的是以Java 接口的形式定义 API ,然后我将在 Scala 中实现它(可能我需要来回转换 Scala/Java 集合,但这将是一个实现细节)。

这样,您可以确保其他 JVM 语言可以与您的 API 交互,并且您可以使用您最擅长的任何语言来实现它。

于 2013-09-02T09:59:02.100 回答
1

Would it be possible to pass e.g. a factory implemented in Scala, but which implements a Java interface, to a Java component and have that Java component call the Scala factory?

即使是这样,切换到 Scala 也无法解决问题,因为那时 jRuby 访问该组件会遇到更多问题。

实际上,所有列出的语言都声明了与 Java 的互操作性,但没有声明与其他语言的互操作性。因此,第一个设计目标是,您的平台应该在其所有 API 中都与 Java 兼容,尽管某些组件可以用其他语言编写 - 但是 API 用户无法看到它。实现它的最简单方法是全部用 Java 编写。此外,我推荐 Java 是因为“更高级”语言的特性有其反面——一条看似无辜的代码行可能会消耗大量的 CPU 时间或内存。

于 2013-09-02T11:36:24.570 回答
1

反过来,Java 可以轻松调用 Scala,使用 eclipse,您需要从“eclipse 市场”安装“Scala IDE”,并将编译器配置为“属性”->“Scala 编译器”-> 中的“Scala Then Java”选项“构建管理器”-> 编译顺序。

ps 你还需要在项目中添加Scala性质。

于 2013-09-02T10:23:28.827 回答