这似乎是一项常见的任务,但我有点困惑。假设我有一个带有数据成员和相应的getter / setter的抽象父类。
public abstract class Parent {
private MyObj myObj;
public MyObj getMyObj() { return myObj; }
public void setMyObj(MyObj myObj) { this.myObj = myObj; }
}
我需要强制子类设置" myObj"变量。我有两个选择:
避免声明数据成员 父母。只需要一个父方法,
abstract public MyObj getMyObj();
然后父将始终引用为getMyObj()。getField1(),getMyObj()。getField2()等。每次创建一个新对象,而不是将其存储在一个地方。
强制子类设置父类数据变量的标准方法是什么?它是一个新的抽象方法,在getters / setter之外?
答案 0 :(得分:8)
要让编译器强制设置myObj
,您可以执行以下操作:
public abstract class Parent {
private final MyObj myObj;
final
表示无法更改值,但也必须设置值。由于您有一个setter,因此可能会更新该值;如果预计不会添加final
关键字。
要确保设置字段,请添加构造函数:
protected Parent( MyObj initial ) {
if ( initial == null )
throw new IllegalArgumentException( "Must provide a value!" );
this.myObj = initial;
}
答案 1 :(得分:0)
您可以从子对象中调用setter方法。