比方说,我们有一个抽象类,定义构造函数取其中的一个先决条件检查,如果该整数为可能值的列表内的整数:如何初始化子类中的静态成员?
public abstract class Value {
protected int value;
protected static List<Integer> possibleValues;
public Value(int val) {
if (!possibleValues.contains(val))
throw new IllegalArgumentException("Illegal value");
value = val;
}
}
但我们要初始化Value
的孩子该列表因为每个类都定义了自己的可能值列表。
我想我可以做一个static
块添加成员possibleValues
,虽然我不喜欢static
块。但这并不意味着所有的孩子班级都会停止指向相同的可能值列表。
如何强制儿童班级定义可能的值列表并进行前提条件检查而不面临我描述的问题?
编辑:所以我们可以说我想继承行为而不是变量本身。
你为什么不定义一个抽象'isValid'方法子类填?或者使用派生类提供的ValueChecker类对值进行模板化? – Robert
我建议使用Set而不是List。此外,使用工厂模式将更加可用和更清洁。 –