Pull to refresh

Коллекции в java перечислениях

Я все ещё новичок в Java, да и не считаю себя программистом по ряду причин.

Но не так давно была задача инициализации одной не очень приятной в обращении NoSQL базы(потом мы её сменили). База подымалась вручную. Свойства у элементов базы приходилось инициализировать по очереди, что превратил класс-иницилизатор базы в огромный список однотипного кода. Кроме того элемент мог обладать типом и свойства разнотипных элементов приходилось писать по очереди. Руки прямо чесались использовать Перечисления и/или Коллекцию. Так как набор типов данных и их атрибутов не менялся на протяжении всей программы выбор пал на перечисления.



Как известно чаще всего свойства перечисления определяется через параметры конструктора. Но этот способ сводился по сути к однотипному коду, но уже не в классе — иницилизаторе базы, а в перечислении. Гугл не выдавал ничего полезного, да и хабр молчал. Метод проб и ошибок привел к появлению приятного и главное рабочего класса — перечисления, по моему мнению имеющий единственный недостаток, которым грешит protected в Java:

public enum Type {

    POST() {
        @Override
        protected void init() {

            attribute.add("name");
            attribute.add("text");

        }
    },
    USER() {
        @Override
        protected void init() {

            attribute.add("email");
            attribute.add("password");
            attribute.add("name");
        }
    };

    protected List<String> attribute = new ArrayList<String>();

    protected abstract void init();

    Type(){
        init();
    }

    public List<String> getAttribute(){
        return attribute;
    }

}


Класс рабочий. Две особенности такой реализации. Список должен быть protected иначе нельзя оперировать внутри Типов.
Метод init() abstract и protected это необходимо, чтобы для каждого Типа метод 100% был перезаписан и конструктор отработал корректно.

Преимущества: можно добавлять в перечисления коллекция и generic.

Недостатки: protected
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.