我有一個抽象類(RandomEvent),其中包含一個Hashmap(sampleSpace with sample measure)。這個HashMap必須填充在子類中。 有沒有辦法讓它只在子類中可見和可編輯,而不是在放置抽象類的同一個包中? 在我看來,這隻能用java類來解決......也許有一些模式? 這是我做過什麼: 將項添加到來自兒童類的集合
public abstract class RandomVariable<Sample> {
private final Hashtable<Sample, Integer> sampleSpace;
private boolean setted;
public RandomVariable() {
sampleSpace = new Hashtable<>();
setted = false;
setSampleSpace();
setted = true;
}
public Sample fireEvent() {
//return one sample chosen randomly according to the probability measure
}
protected Map<Sample, Integer> getSampleSpace() {
if(setted==true) {
Map<Sample, Integer> ret = new Hashtable<>();
ret.putAll(sampleSpace);
return ret;
}
return sampleSpace;
}
protected abstract void setSampleSpace();
public double getProbability(final Set<Sample> subset) {
//return probability of a subset of the sample space
}
public double getProbability(Sample sample) {
//return probability a the sample
}
public boolean isSetted() {
return setted;
}
}
所以setSampleSpace()方法中的少兒班,將確定一個具體的隨機事件(具有精確的樣本集)中實現。 下面一個例子:
public class Coin extends RandomVariable<String> {
@Override
protected void setSampleSpace() {
if(!isSetted()) {
super.getSampleSpace().put("head", 1);
super.getSampleSpace().put("back", 1);
}
}
}
在C++中,我會剛剛宣佈HashMap中作爲保護,但現在我STUDING Java和它似乎有在訪問修飾符一定的差異。 感謝您的答案!