Java抽象类包含一个映射变量,子类使用不同的实现初始化映射

Java抽象类包含一个映射变量,子类使用不同的实现初始化映射,java,dictionary,abstract,Java,Dictionary,Abstract,我有一个包含map变量的抽象类,对于扩展抽象类的子类,我想使用不同的实现初始化map 例如: public abstract class Abs() { protected Map<Object, Object> map; } public class classA extends Abs { public classA() { map = new HashMap<>(); } } public class classB ext

我有一个包含map变量的抽象类,对于扩展抽象类的子类,我想使用不同的实现初始化map

例如:

public abstract class Abs() {
    protected Map<Object, Object> map;
}

public class classA extends Abs {
    public classA() {
        map = new HashMap<>();
    }
}

public class classB extends Abs {
    public classB() {
        map = new ConcurrentHashMap<>();
    }
}

public class classC extends Abs {
    public classC() {
        map = new LinkedHashMap<>();
    }
}
公共抽象类Abs(){
保护地图;
}
公共类classA扩展了Abs{
公共甲级(){
map=新的HashMap();
}
}
公共类B扩展了Abs{
公共类别B(){
map=新的ConcurrentHashMap();
}
}
公共类classC扩展了Abs{
公共类别c(){
map=newlinkedhashmap();
}
}

我的问题是:这种实现是否有当前的设计模式?另外,因为在抽象类中,我们不初始化映射,是否有任何问题?

要强制每个子类提供映射实例,您只需要求它们将其作为构造函数参数提供:

public abstract class Abs {

    private Map<Object, Object> map;

    protected Abs(Map<Object, Object> map) {
        this.map = map;

        //you can even validate:
        if(null == this.map) throw new IllegalArgumentException("...");
    }
}

public class classA extends Abs {
    public classA() {
        super(new HashMap<Object, Object>());
    }
}

//all other subclasses follow the same logic
公共抽象类Abs{
私人地图;
受保护Abs(地图){
this.map=map;
//您甚至可以验证:
如果(null==this.map)抛出新的IllegalArgumentException(“…”);
}
}
公共类classA扩展了Abs{
公共甲级(){
super(新HashMap());
}
}
//所有其他子类遵循相同的逻辑

如果子类没有将实例分配给
map
,该怎么办?这会影响超类吗?如果是,那么你需要重新考虑你的合同。是的,这正是我所关心的,这意味着我们现在必须在子类构造函数中初始化映射。或者,如果我在抽象类构造函数中初始化映射,而在子类中用所需的实现重写该映射,那么这可以吗?