我有一个扩展类,需要在父类中使用和扩展变量版本。到目前为止,我已经开始使用它了:
public class ParentClass
{
protected ParentVariable variable;
public ParentClass(){
this.variable = new ParentVariable();
}
....
}
public class ChildClass extends ParentClass
{
public ChildClass(){
super();
this.variable = new ChildVariable();
//Where ChildVariable Extends ParentVariable
....
}
}
这或多或少的工作只要每次我使用变量我将它投射到ChildVarible,但这很难看并引发一些问题。有更好的方法来执行此操作吗?感谢。
答案 0 :(得分:2)
如果可以使你的超类抽象化,你可以使用泛型来解决这个问题:
public abstract class ParentClass<T extends ParentVariable>
{
private T variable;
protected T getVariable(){
return variable
}
protected void setVariable(T variable){
this.variable = variable;
}
....
}
public class ChildClass extends ParentClass<ChildVariable>
{
public ChildClass() {
setVariable(new ChildVariable());
//Where ChildVariable Extends ParentVariable
ChildVariable foo = getVariable() // no cast nessecary
}
}
请注意,我将您的字段设为私有。您应该始终通过getter和setter方法访问字段,即使在子类中也是如此。
如果这是不可能的(可能即使它是),这表明您的设计存在缺陷。可能需要重构所有类以实现干净的体系结构。不幸的是,这取决于所有四个类的整个实现,也可能取决于使用这些类的整个上下文。对于stackexchange来说,答案太宽泛了。