Как стать автором
Обновить

Коллекции в 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
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.