我有一个3个具体类的抽象基类 假设基类的构造函数有2个参数。每个子类的构造函数接受这两个参数加上一个或两个额外的参数,并将2个必要的参数传递给超类构造函数。类似的东西:
public abstract class SuperClass {
public long field1;
private SomeType field2;
public SuperClass(long field1, SomeType field2) {
this.field1 = field1;
this.field2 = field2;
}
...
}
public class SubClass extends SuperClass {
private String sometext;
public SubClass(long field1, SomeType field2, String sometext) {
super(field1, field2);
this.sometext = sometext;
}
...
}
我想这不是太糟糕。但是,如果在某个时候我决定我需要更改SuperClass
的构造函数(比如说它需要一个新字段的附加参数),我也不想编辑子类。
所以我正在寻找一种优雅的方式来告诉SubClass
构造函数“接受super()
需要的参数并将它们传递给它,同时采用{{1}}并对它做一些事情”。所以在伪代码中:
String sometext
这样我就可以更改public class SubClass extends SuperClass {
private String sometext;
public SubClass(paramlist:super(), String sometext) {
super(paramlist:super());
this.sometext = sometext;
}
...
}
定义和实例化SuperClass
的代码,而不用担心SubClass
本身。
我已经研究过可能的解决方案,比如使用专用对象将参数捆绑在一起,使用Builders甚至使SubClass
具体化,并将其实例传递给SuperClass
构造函数,然后繁琐地复制字段。我认为这些解决方案中的任何一个都不适合我,因为它们中的每一个都会将复杂性添加到我的代码中而不是减少它。
是否有相对简单的方法来执行此操作,类似于上面列出的伪代码的复杂性?我可能错过了一个非常明显的事实,可以防止这成为一件事吗?