0

私はGWTを使用しています。

Java コードを Javascript コードにコンパイルするときに、一部のメンバーの名前が変更されることがあります。例: プライベート int の高さ。JS になります: height_0;

例:

public class TestClass {

    private int a;

public TestClass()
{
    a = 0;
}

public TestClass(int a)
{
    this.a = a;
}

public int getMember()
{
    return a;
}

public void advance()
{
    a++;
}

}
次のような出力が得られます。

function TestClass_0(){

 this.a_0 = 0;

}



function TestClass_1(a){

 this.a_0 = a;

}



function TestClass(){

}



_ = TestClass_1.prototype = TestClass_0.prototype = TestClass.prototype = new Object_0;

_.advance_0 = function advance(){

++this.a_0;

}

;

_.getClass$ = function getClass_1(){

return Lcom_autodesk_autocadws_gwt_platform_testExporter_TestClass_2_classLit;

}

;

_.getMember_0 = function getMember(){

return this.a_0;

}

;

_.a_0 = 0;

}

メンバー a の名前が a_0 に変更されました。場合によっては、Web ワーカーを使用する場合、コードは Web ワーカー スクリプトで別の方法でコンパイルされ、メンバーの名前は変更されません (または、たとえば a_1 に変更されます)。それに関する私の問題は、メッセージ内のオブジェクトを Web ワーカーに転送するときです。Web ワーカー側を Java でコーディングする場合、a_0 ではなくメンバー a にアクセスすることを期待しています。getter を使用しても問題は解決しません。JS にコンパイルされると直接アクセスに置き換えられるだけだからです。

私の質問: これらの名前の変更はなぜ行われるのですか? どのような場合に?それらを避けることは可能ですか?

どうもありがとう。

4

1 に答える 1

1

ほとんどの場合、フィールドは実際には lik などに名前が変更されaますb。ここに表示されているのは-style PRETTY、コードを難読化しないでコンパイルしたためです。

GWT がコードを難読化する理由は、コードを小さくするためです。

オブジェクトを外の世界に渡す必要がある場合は、安定した構造にシリアル化 (または JavaScript オブジェクトにマップ) する必要があります。

最も簡単な方法は、JavaScriptObject. gwt-exporterもご覧ください。

于 2012-06-07T12:33:15.467 に答える