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 worker 时,代码会在 web worker 脚本上进行不同的编译,并且不会更改成员的名称(或者会更改为 a_1,例如)。我的问题是当我将消息中的对象传输给网络工作者时。在用 Java 编写 web worker 端时,我希望访问成员 a,而不是 a_0。使用 getter 并不能解决问题,因为它们在编译为 JS 时被直接访问替换。

我的问题:为什么会发生这些命名变化?在哪些情况下?有可能避免它们吗?

非常感谢。

4

1 回答 1

1

在大多数情况下,这些字段实际上会被重命名为a,b等。您在此处看到的是由于编译-style PRETTY不会混淆代码。

GWT 混淆代码的原因是为了使其更小。

如果您需要将对象传递给外部世界,您必须将它们序列化(或将它们映射到 JavaScript 对象)到一个稳定的结构。

最简单的方法是使用JavaScriptObject. 您还可以查看gwt-exporter

于 2012-06-07T12:33:15.467 回答