It looks like the field initialization of an object is not performed when a constructor uses the 'this(…)' statement to delegate the execution to a different constructor of the class.
Here an example:
--- BaseClass.java ---
public class BaseClass {
public boolean f;
BaseClass(boolean f) {
this.f = f;
}
}
----------------------
--- SubClass.java ---
import java.util.ArrayList;
import java.util.List;
public class SubClass extends BaseClass {
public List<String> strings = new ArrayList<String>();
SubClass() {
this(true); // BUG: Calling 'this(...)' skips the field initialization
}
SubClass(boolean f) {
super(f);
}
public static void main(String[] args) {
SubClass obj = new SubClass();
obj.strings.add("foo");
System.out.println(obj.strings.size());
System.out.println(obj.strings.get(0));
}
}
----------------------
Running SubClass.main in Java will prompt (as expected):
1
foo
Running the same code using Java2Script however ends with an error:
TypeError: 'null' is not an object (evaluating 'obj.strings.add')
This error occurs because the member field 'strings' is not initialized.
Directly calling 'super(true)' in the constructor 'SubClass()‘ correctly initializes the strings field.
Udo