【发布时间】:2014-01-23 15:35:35
【问题描述】:
我正在尝试在 Java 中创建一个抽象类,其中一部分创建涉及调用子类需要实现的初始化方法。我希望子类可以访问抽象类不需要知道的任意参数。
这里有一些代码让它更清楚:
public abstract class NormalizedRandom<T> {
private Queue<T> randomList;
private List<T> usedRandomsList;
public NormalizedRandom() {
randomList = new LinkedList<T>();
usedRandomsList = new ArrayList<T>();
init();
shuffleList();
}
protected abstract void init();
...
}
和
public class NormalizedRandomIntegerRange extends NormalizedRandom<Integer> {
private int min;
private int max;
private int repeats;
public NormalizedRandomIntegerRange(int min, int max, int repeats) {
this.min = min;
this.max = max;
this.repeats = repeats;
}
@Override
protected void init() {
for(int num = min; num <= max; num++) {
for(int i = 0; i < repeats; i++) {
super.addRandomOutcome(num);
}
}
}
}
显然这是行不通的,因为在初始化参数之前需要调用 super()。
这类问题看起来必须有一些简单的设计模式来解决它。我只是想不出解决问题的正确方法。
【问题讨论】:
标签: java design-patterns