Проблема с инициализацией конечных параметров непосредственно в конструкторе подклассов заключается в том, что вам нужно сделать все это в одной строке, так как super () должен быть первым оператором конструктора. Поэтому вместо этого я предпочитаю сделать конструктор закрытым и создать статический метод сборки, подобный этому:
public abstract class Test {
protected final ArrayList<Object> objects;
protected Test(ArrayList<Object> objects) {
this.objects = objects;
}
}
public class TestSubA extends Test {
public static TestSubA build() {
ArrayList<Object> objects = new ArrayList<Object>(20);
objects.put(...);
// Other stuff
return new TestSubA(objects);
}
private TestSubA(ArrayList<Object> objects) {
super(objects);
}
}