比方說,我們有一個抽象類,定義構造函數取其中的一個先決條件檢查,如果該整數爲可能值的列表內的整數:如何初始化子類中的靜態成員?
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。此外,使用工廠模式將更加可用和更清潔。 –