有没有人知道在调用超类构造函数之前,Java中是否有方法在子类中设置实例变量的值。我有一个简要的示意图,下面是我要完成的工作 - 我需要根据子类的类型设置不同的超类定义的实例变量,但我仍然希望能够共享通用的非构造函数代码子类的不同实例。
有没有干净的方式来做到这一点,也许某种编码模式,我失踪或什么?提前感谢任何想法。
public abstract class ConstraintSatisfactionProblem {
final Set variables;
final Set constraints;
public Foo() {
this.variables = setupVariables();
this.constraints = setupConstraints();
}
public abstract Set setupVariables();
public abstract Set setupConstraints();
public Map solve() { ... }
}
public class WordSquare extends ConstraintSatisfactionProblem {
final int size;
final static Set domain = ...;
public WordSquare() {
super(); // can I simulate calling super() after setting this.value = 4?
this.value = 4;
}
public Set setupVariables() {
this.variables = new HashSet();
for(int row = 0; row < size; ++row) {
for(int col = 0; col < size; ++col) {
variables.add(new Variable(new Pair(row, col), domain);
}
}
return this.variables;
}
public Set setupConstraints() {
// setup code specific to this problem
}
}
public class Cryptarithmetic extends ConstraintSatisfactionProblem {
final String problem;
public Cryptarithmetic(String problem) {
super();
this.problem = problem;
}
public Set setupVariables() {
this.variables = new HashSet();
for(char c : problem.toCharArray()) {
variables.add(new Variable(c, getDomain());
}
}
return this.variables;
}
public Set setupConstraints() {
// setup code specific to this problem
}
}