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

问题描述 投票:1回答:1

我有一个包含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<>();
    }
}

我的问题是:这种实现是否有当前的设计模式?另外因为在抽象类中,我们没有初始化地图,是否有任何顾虑呢?

java dictionary abstract
1个回答
0
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.