我有以下接口(一些方法中省略爲簡單起見):添加受保護的構造,讓子類提供不同的實現
public interface Container{
public void put(String s, Object o);
public Object get(String s);
}
及其實施:
public class ContainerImpl implements Container{
private Map<Stirng, Object> m;
public ContainerImpl(){
m = new HashMap<>();
}
//This constructor is used in the case if a client is not satisfied
//by the HashMap, e.g. in case of Enum it's better to use EnumMap
protected ContainerImpl(Map<String, Object> m){
this.m = m;
}
public void put(String s, Object o){
m.put(s, o);
}
public Object get(String s){
m.get(s);
}
}
我的問題是關於是否提供這樣一個受保護的構造者與封裝相反。事實上,我們向客戶提供一些內部使用Map
的知識。如果數據結構發生變化,我認爲,我們必須從作爲參數傳遞的映射執行轉換,這可能會導致一些錯誤。
這也使內部地圖可以從外部訪問。 – Basilevs
@Basilevs確實,好點。 –