自动将Scala代码转换为Java代码

22

我有一个用Scala编写的应用程序,我的一些团队成员想要一个Java版本。这是一个演示应用程序,用于使用另一个用Scala编写的API,并且他们想要一个Java版本的应用程序来能够从Java中使用该API。然而,这个应用程序相当大,我不想手动重写成Java(他们也不想学习Scala)。是否有任何工具可以从Scala代码自动生成(可读性)的Java代码?


2
我已经在Prolog中编写了一个概念验证,可以将Scala的子集翻译成Java。它基于我的universal-transpiler库。 - Anderson Green
1
如果你只想进行代码级别的转换,在Intellij IDEA中当你复制Scala代码并将其粘贴到Java项目中时,它会询问您是否想要进行转换。希望对你有所帮助。 - mithunpaul
2
发现了一个很好的在线转换器,可以将一些复杂的Scala代码转换成Java - https://www.javainuse.com/sc2ja - Batman Rises
5个回答

10

他们希望有一个Java版本的应用程序,以便能够从Java使用API。

由于Scala类最终都是JVM字节码,因此可以从Java中使用。您能否仅打包一个包含您的类的jar供他们使用?


我已经做了,但他们希望比API更多一点(即功能,这需要一些复杂的示例)。 - Jus12
7
也许您可以提供API及一些Java示例来说明如何使用它? - JohnnyK
我想我会这样做。反编译选项无法生成真正可用的Java代码。 - Jus12

9

我认为将Scala转换回标准的Java是不可能的,因为Scala进行了一些相当低级的字节码操作。我90%确定它们做了一些无法精确转换回常规Java代码的事情。


1
任何Scala代码原则上都可以被重写为Java(毕竟它们都是图灵完备的);只是不会那么好看。而且任何自动化的Scala到Java翻译可能会导致一些相当丑陋的代码。 - dhg
2
你确定吗?我并不相信所有有效的Java字节码序列都可以由某个编译程序真正生成... - Louis Wasserman
3
是的,它们都是图灵完备的。我只是指我认为你无法生成能够编译成与scala完全相同的字节代码的Java代码。你无法进行直接翻译。 - JohnnyK

6

没有这样的工具。 从某种意义上说,Scala是Java的coffescript。 看看coffescript中所有那些时髦的类是如何被翻译成javascript的。Scala也是一样的。 我不认为有很多功能不能以任何方式被翻译成Java,但大多数功能将被翻译成非常混乱的代码,即使人类会做这项工作。

但是有Java转Scala的翻译器

* 不是字面上的类


看了一下Java转Scala的链接。看来我的团队成员们很快也会问同样的问题 :) - Jus12

5

您需要将.class文件反编译为Java源代码文件,注意Scala会产生更多的.class文件。

您可以使用Oracle SDK中包含的javap或jad反编译器。

有关详细说明,请阅读以下文章:

链接Scala类到Java源代码


4

不确定这是否有效,但您可以通过Java反编译器运行类文件。

如果有用的话,结果肯定会非常丑陋。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接