我正在使用GWT。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++;
}
}
會導致輸出像這樣:
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_0。在某些情況下,當使用網絡工作者時,代碼將在網絡工作者腳本上以不同方式編譯,並且成員的名稱不會被更改(例如,將被修改爲a_1)。 我的問題是,當我將消息中的對象傳輸給Web工作人員時。當用Java編碼web worker時,我期望訪問成員a,而不是a_0。使用getters並不能解決這個問題,因爲當編譯成JS時,它們被直接訪問所取代。我的問題: 爲什麼會發生這些命名變化?在哪些情況下?是否有可能避免它們?
非常感謝。
如果一切都通過GWT,命名應該是一致的,你應該沒問題。 –
它們在主線程上下文和web worker上下文之間不一致,因爲這兩個上下文被編譯爲2個獨立的腳本。 – user1442141
我認爲,當成員名字與全局空間的變量或Javascript結構的成員相沖突時,它們將被重命名。在我的情況下,寬度或高度等名稱出現問題(當然,這些名稱在OBF模式下已更改,因此可解決此問題)。任何人都可以在這個問題上確認我? – user1442141