2012-03-26 3197 views
13

我有一個用Scala編寫的應用程序,我的一些團隊成員想要它的Java版本。這是一個使用另一個用Scala編寫的API的演示應用程序,他們希望Java版本的應用程序能夠使用Java中的API。但是,該應用程序有點大,我不想在Java中手動rewerite(並且他們不想學習Scala)。有什麼工具可以自動從Scala代碼生成(可讀的)Java代碼嗎?自動將Scala代碼轉換爲Java代碼

+1

也許你的同事可以嘗試讀取Scala的例子,有很好的機會,他們沒有爲「可曉得cala「來了解代碼的功能。 – gerferra 2012-03-27 16:44:39

+1

我[書面證明的概念在序言(https://gist.github.com/jarble/d4325e5a1a700129a8db20bde0b2c410),其轉換斯卡拉的一個子集到Java。它基於我的[universal-transpiler](https://github.com/jarble/universal-transpiler)庫。 – 2016-09-17 18:16:09

回答

11

他們想要的應用程序的Java版本,以便能夠使用API​​從Java

Scala類是可用的從Java(因爲它是所有JVM字節碼到底)。你可以打包你的課程的罐子供他們使用嗎?

+0

我這樣做了,但他們想要比API多一點(即功能,這需要一些複雜的例子)。 – Jus12 2012-03-26 22:31:06

+5

也許你可以給他們提供API和一些如何使用它的Java示例? – JohnnyK 2012-03-26 22:34:47

+0

我想我會這樣做。反編譯器選項不會生成真正可用的Java代碼。 – Jus12 2012-03-27 09:50:49

7

我不認爲有可能從scala轉換回標準java,因爲Scala可以完成一些相當低級別的字節碼操作。我90%確定他們做了一些無法完全轉換回普通Java代碼的東西。

+1

任何Scala代碼工作可以,原則上,重新寫爲Java的(畢竟,他們倆都是圖靈完備);它不會那麼好。任何自動的Scala-to-Java翻譯都可能會導致一些非常糟糕的代碼。 – dhg 2012-03-26 22:39:03

+2

你確定嗎?我不相信所有有效的Java字節碼序列真的可以通過一些編譯程序生成... – 2012-03-26 22:42:06

+3

當然,它們都是圖靈完整的。我的意思是我不認爲你可以生成可以編譯成與scala完全相同的字節碼的Java代碼。你無法直接翻譯。 – JohnnyK 2012-03-26 22:46:20

5

不,沒有這樣的工具。在某種意義上,Scala是Java的一個腳本。 看看coffescript中所有那些時髦的類是如何爲javascript的translated。 *和scala一樣。
我不認爲有很多功能無法以任何方式轉換爲Java,但大多數功能都會被轉換爲非常混亂的代碼,即使人類會做這些工作。

但是有java to scala translators

*不能隨便說關於類

+0

看看java到scala的鏈接。似乎很快我的團隊成員會問同樣的問題:) – Jus12 2012-03-26 22:47:09

2

不知道這是否會工作,但你可以通過Java反編譯運行的類文件。

如果它在所有的結果必然是醜陋的地獄。

2

你要反編譯的.class文件到Java源文件,提防斯卡拉產生更多的.class文件

可以從Oracle使用javap的SDK中包含的或反編譯的jad

爲詳細說明閱讀下面的文章:

Link scala class to java source