Java абстрактный класс содержит переменную карты, подкласс инициализирует карту, используя другую реализацию - PullRequest
1 голос
/ 23 апреля 2019

У меня есть абстрактный класс, который содержит переменную карты, и для подклассов, расширяющих абстрактный класс, я хочу инициализировать карту, используя различные реализации.

Например:

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<>();
    }
}

Мой вопрос: есть ли текущий шаблон проектирования для такого рода реализации?Кроме того, поскольку в абстрактном классе мы не инициализируем карту, есть ли какие-либо проблемы для этого?

1 Ответ

0 голосов
/ 23 апреля 2019

Чтобы заставить каждый подкласс предоставлять экземпляр карты, вы можете просто потребовать, чтобы он предоставил его в качестве аргумента конструктора:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...