[英]Java to JavaScript using GWT compiler
我編寫了一些Java代碼,我想將其轉換為JavaScript。 我想知道是否可以使用GWT編譯器將提到的Java代碼編譯成JavaScript代碼, 保留方法,變量和參數的所有名稱 。 我嘗試使用-draftCompile關閉代碼優化來編譯它,但是方法名稱被破壞了。 如果GWT編譯器不能這樣做,可以使用其他一些工具嗎?
更新
Java代碼只依賴於GWT模擬類,因此GWT編譯器肯定能夠處理它。
更新2
這個Java方法:
public String method()
翻譯成這個JavaScript函數:
function com_client_T_$method__Lcom_client_T_2Ljava_lang_String_2()
使用編譯器選項:
-style DETAILED
-optimize 0
-draftCompile
所以名稱不能保留。 但有沒有辦法控制它們的變化?
澄清
比如說,您有一個用Java編寫的排序算法(或其他一些簡單的Maths實用程序)。 方法sort()采用整數數組。 並在排序的數組中返回這些整數。 現在說,我有Java和JavaScript應用程序。 我想用Java編寫這個方法一次,通過GWT編譯器運行它,並保持方法名稱相同,或者以可預測的方式更改它,這樣我就可以檢測它並知道如何將其更改回排序( )。 然后我可以將該代碼放在我的JavaScript應用程序中並使用它。 如果Java版本發生變化,我也可以自動重新生成它。 我在技術上有一個非常好的理由,我在高層次上理解GWT的概念,我只是在尋找這一點的答案。
結論
主要問題的答案是否定的 。 雖然方法名稱可以在某種程度上保留,但其主體不可用。 其中的方法調用分散在整個生成的文件中,因此,它們不能在JavaScript庫中使用,這是本主題的重點。
雖然您可以將編譯器設置為輸出“漂亮”代碼,但我建議您為要從GWT項目外部調用的類編寫導出函數。 我相信GWT文檔中的某個地方詳細說明了如何做到這一點,但我找不到它,所以我剛剛創建了一個例子。
class YourClass {
public YourClass() {
...
}
public void yourMethod() {
...
}
public static YourClass create() {
return new YourClass();
}
public final static native void export() /*-{
$wnd.YourClass = function() {
this.instance = new @your.package.name.YourClass::create()()
}
var _ = $wnd.YourClass.prototype;
_.yourMethod = function() {this.instance.@your.package.name.YourClass::yourMethod()()}
}-*/;
}
編輯
詳細說明,您的代碼將像平常一樣進行模糊處理,但由於導出功能,您可以輕松地在外部引用這些功能。 您不必在JavaScript中重寫Java類中的任何內容。 您只能在JavaScript中編寫引用,因此您可以這樣做:
var myInstance = new YourClass();
myInstance.yourMethod();
當然,您必須從GWT應用程序中的某個位置(最有可能在您的EntryPoint中)調用靜態導出方法才能使其工作。
有關從JavaScript引用Java方法的更多信息: http : //code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields
也許我可以回答你的第二個問題:“如果GWT編譯器不能這樣做,可以使用其他工具嗎?”
我現在使用Java2Script已經有一段時間了,也是在相當大的項目上。 與本機JavaScript集成很好,名稱被保留,並且在一段時間之后,甚至可以輕松地將生成的JavaScript(在瀏覽器調試器中)與原始Java代碼匹配。
你做
否 - 這是GWT編譯器無法實現的,因為構建GWT編譯器是為了從Java生成優化且性能非常好的JavaScript。
最大的優點是,您可以在Java中維護您的項目並使用GWT將其編譯為JavaScript。 因此,無需阻止JavaScript結果中的變量名和方法名,因為所有更改和工作都在JAVA源中完成。
在GWT的JavaScript輸出中工作並不是那么容易,而且真的很多工作!
更新 :
通過David的一絲暗示,我找到了Compiler-Option“ -style ”。 您可以嘗試使用以下選項:
-style=PRETTY -optimize=0
我不知道這是否真的會產生“人類可讀”的代碼。 我認為它不會,因為GWT框架仍然是生成的JavaScript的一部分,因此很難對JavaScript結果進行更改。 試試讓我們知道......
您可以通過編寫調用它的內聯JavaScript來“導出”您的函數,並且有一個工具gwt-exporter在您使用@Export
和類似注釋類和方法時自動執行此操作。 更多信息: https : //code.google.com/p/gwtchismes/wiki/Tutorial_ExportingGwtLibrariesToJavascript_en
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.