Я все ещё новичок в Java, да и не считаю себя программистом по ряду причин.
Но не так давно была задача инициализации одной не очень приятной в обращении NoSQL базы(потом мы её сменили). База подымалась вручную. Свойства у элементов базы приходилось инициализировать по очереди, что превратил класс-иницилизатор базы в огромный список однотипного кода. Кроме того элемент мог обладать типом и свойства разнотипных элементов приходилось писать по очереди. Руки прямо чесались использовать Перечисления и/или Коллекцию. Так как набор типов данных и их атрибутов не менялся на протяжении всей программы выбор пал на перечисления.
Как известно чаще всего свойства перечисления определяется через параметры конструктора. Но этот способ сводился по сути к однотипному коду, но уже не в классе — иницилизаторе базы, а в перечислении. Гугл не выдавал ничего полезного, да и хабр молчал. Метод проб и ошибок привел к появлению приятного и главное рабочего класса — перечисления, по моему мнению имеющий единственный недостаток, которым грешит protected в Java:
Класс рабочий. Две особенности такой реализации. Список должен быть protected иначе нельзя оперировать внутри Типов.
Метод init() abstract и protected это необходимо, чтобы для каждого Типа метод 100% был перезаписан и конструктор отработал корректно.
Преимущества: можно добавлять в перечисления коллекция и generic.
Недостатки: protected
Но не так давно была задача инициализации одной не очень приятной в обращении 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