我正在使用GWT。
当它将Java代码编译为Javascript代码时,有时它会更改某些成员的名称。 例如: private int height; 变成了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++;
}
private int a;
public TestClass()
{
a = 0;
}
public TestClass(int a)
{
this.a = a;
}
public int getMember()
{
return a;
}
public void advance()
{
a++;
}
会产生如下输出:
}
成员a的名称已更改为a_0。在某些情况下,使用Web worker时,代码将在Web worker脚本上进行不同的编译,并且不会更改成员的名称(例如,将被cjanged到a_1)。 我的问题是当我将消息中的对象传输给Web worker时。在用Java编写Web工作者端时,我期望访问成员a,而不是a_0。使用getter并不能解决问题,因为在编译为JS时,它们只是被直接访问所取代。
我的问题: 为什么会发生这些命名更改?在哪些情况下?有可能避免它们吗?
非常感谢。
答案 0 :(得分:1)
在大多数情况下,这些字段实际上会重命名为a
,b
等等。您在这里看到的是由-style PRETTY
编译而不会混淆代码。
GWT模糊代码的原因是使代码更小。
如果您需要将对象传递给外部世界,您必须序列化它们(或将它们映射到JavaScript对象)到一个稳定的结构。
最简单的方法是使用JavaScriptObject
。您还可以查看gwt-exporter。