【问题标题】:Automated Java to Scala source code conversion? [closed]自动化 Java 到 Scala 源代码转换? [关闭]
【发布时间】:2011-01-29 20:32:14
【问题描述】:

(是的,我知道我可以从 Scala 调用 Java 代码;但这毫无意义;我想删除 Java 代码,而不是保留它,而必须查看它并永远维护它!)

是否有任何实用程序可以将 Java 源代码转换为 Scala 源代码?

我相信理论上应该可以以最小的损失完成。

我找到了这个,但它似乎不活跃,可能有问题/不完整...... http://sourceforge.net/projects/java2scala/

还有其他选择吗?

【问题讨论】:

  • 即使存在自动转换,我也会有些警惕。 Scala 的最大优势之一是能够以更紧凑和更易于理解的方式表达您的编码问题。自动转换将以 Scala 语法表达 Java 风格的解决方案。
  • @Rex Kerr - +1,你应该把你的评论变成一个答案。 Scala 习语与 Java 有如此巨大的不同,即使是写得很好的 Java 代码也会变成写得很糟糕的 Scala 代码。
  • @Alex R - 我不知道你有多少 Java 代码,但如果它只有几千个类,你最好手动转换它。您应该能够以零碎的方式进行,一次更换一组课程。在这个过程中,你几乎肯定会学到一些关于 Java 和 Scala 的知识。
  • 您首先自动转换然后继续手动重构代码的情况如何?似乎是完全手动转换的更安全(更快)的替代方案。
  • IntelliJ 的工作原理就像一个 cham。

标签: java scala code-conversion


【解决方案1】:

IntelliJ 有点,有点,这样做。您需要使用您的 Java 源代码打开一个项目。然后,您可以将表达式、方法或整个类复制/粘贴到 .scala 文件中。这将转换为等效的 Scala 代码。

转换的保真度并不完美,因此还不支持批量转换。

我建议使用最新版本的IntelliJScala Plugin。社区版是免费的。

除此之外,Paul Phillips 曾启动 Scalify 项目,将代码从 Java 翻译成 Scala(或者,您最喜欢的语言),甚至在此过程中对其进行改进!他在video 中解释了这个概念。然而,这项努力被搁置了,大概是因为他将注意力转向直接为 Scala 编译器和标准库做出贡献。

【讨论】:

  • 优秀。我很快就会尝试 IntelliJ。我不敢相信有人认为即使是琐碎的事情,比如将尖括号转换为方括号并将类型声明移动到“:”的另一侧也应该手动完成!他们一定不是认真的:-)
  • 太棒了。对此 IntelliJ 功能非常满意。
  • 这是 Paul Phillips 的 Scalify 项目的可用分支(似乎不再维护):github.com/mbana/scalify 另外,还有javatoscala.com
【解决方案2】:

我认为在一般情况下自动将 Java 转换为 Scala 是不可能的。 Java 中的许多低级构造在 Scala 中不存在(例如字段和静态成员),Scala 对 Java 中不存在的构造函数设置了限制,并且 Scala 没有像 Java 这样的原始类型(没有指定的泛型参数)。

【讨论】:

  • 字段和静态成员确实存在。如果遇到静态字段等,您可以轻松创建对象。对于没有指定参数的泛型,您始终可以在 Scala 中使用 Any。将 Java 转换为 Scala 是绝对可能的(如果不是微不足道的)。特别是因为这两种语言都在 JVM 上运行,所以在功能方面您完全没有问题,因为您甚至可以调用 Java 标准库。两种语言都是静态类型的。总而言之,如果您想将语言 A 转换为 B,那么 Java 到 Scala 是您可以选择的最简单的情况之一。
  • 存在“逻辑等价物”,但它们一点也不相同,因此翻译最终是近似的。幼稚的翻译可能适用于琐碎的示例,但会破坏复杂的代码。
  • 似乎反过来(Scala to Java)是不可能的stackoverflow.com/q/9880805/243233
  • “而且 Scala 没有像 Java 这样的原始类型(没有指定泛型参数的泛型” - [_] 参数呢?
  • 静态成员和原始类型被简单地映射到 Scala;而且我看不出Scala中如何不存在字段-或者您的意思是它们总是用setter-getter对自动包装?但这也是一个微不足道的 1-1 映射。
【解决方案3】:

【讨论】:

  • 我只是跟着链接,项目是空的,没有文件,没有维基页面,没有活动:-(
  • @Hugh:以下对我有用:1)检查代码(code.google.com/p/jatran/source/checkout),2)ant,3)./jatran.sh --input SomeClass.java
【解决方案4】:

在 IntelliJ IDEA 中有一个名为“Convert to Scala”的重构。它在 Refactor 菜单下(安装 Scala 插件后)Ctrl+Shift+G。 所以你不需要玩复制/粘贴。

只要确保你打开了一个java文件,如果是scala或其他文件就没有这个选项。

【讨论】:

  • 我在带有 Scala 插件 0.4.1338 的 IDEA 10.5.1 中没有看到这个选项。
  • 选择任何java类或在编辑器中打开它,应该会出现这个菜单项(在IDEA 10.5.1中测试)
  • 我也不支持 11.1 社区版和 Scala 插件 0.5.808 的这个选项。
  • 我仍然拥有它,虽然我使用的是终极版(IDEA:IU-117.747,Scala 插件:0.5.913)。只要确保你打开了一个java文件,如果是scala或其他文件就没有这个选项
  • 在此选项出现之前,您需要确保您的项目支持 Scala。右键单击您的项目,然后选择 Add Framework Support... 并添加 Scala。
【解决方案5】:

我刚刚发布了以下工具:Scalagen。我也尝试过 Jatran,但对一些错误和难以集成感到沮丧。 Scalagen 是可扩展的,并带有一个 Maven 插件。

【讨论】:

  • 看起来不错,但有没有办法在不使用 Maven 的项目上运行它?
  • 你当然可以直接运行scala代码,Maven插件只是一个简单的包装器。
  • 查看你正在使用的 mojo 类 Converter.instance().convert(in, out);。我在您的代码中没有看到围绕它的主要工具。直接运行 scala 代码是指编写一些代码来专门转换我的项目,还是有内置的方法可以做到这一点?
  • 没有内置方式,但如果你愿意,你可以贡献一些东西。
  • 完成,github.com/mysema/scalagen/pull/36。请记住,我很快就把它放在一起只是为了弄乱 scalagen。
【解决方案6】:

您可以使用在线Java to Scala converter,它使用Scalagen 库。

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 2014-12-22
    • 2018-08-12
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多