У меня есть абстрактный класс Entity
. Каждому классу, расширяющему Entity
, потребуются некоторые настройки по умолчанию и некоторые настраиваемые параметры:
public abstract class Entity {
protected Entity() {
// ... default setup
customSetup();
}
protected abstract void customSetup();
// ...
}
Мой расширяющийся класс MyEntity
принимает параметр в конструкторе, который будет использоваться в customSetup ()
:
public class MyEntity extends Entity {
private Data data;
public MyEntity(Data d) {
super(); // in here customSetup() is called!
data = d;
}
@Override
protected void customSetup() {
codeDependingOn(data); // will throw NPE: data==null yet!
}
}
Как указано в комментариях, этот код не будет работать.
Я мог бы просто выбросить customSetup ()
и поместить весь собственный код после super ()
, но наличие этого абстрактного метода проясняет то, что вы должны туда поместить.
Мне кажется, что я нарушаю какое-то правило ООП-дизайна. Как правильно делать то, что я хочу?