Разрабатываю приложение на Java 8, в котором мне необходимо использовать некие настройки. Настройки могут быть разными, объединяет их сейчас то, что есть некоторое представление настройки (сейчас это - элемент перечисления), и ключ и значение настройки. Настройки планируется добавлять в ArrayList
Сейчас передо мной встал выбор - использовать ли перечисление, реализующее общий интерфейс, для хранения настроек, или же попробовать воспользоваться final class
Конкретно Java я только начинаю всерьёз заниматься, поэтому вопрос может быть глуповат, но поиск в Сети на русском и английском языках не дал мне ясности.
Привожу пример (абстрактный), как реализовано сейчас:
public interface Option {
public String getKey();
public String getValue();
}
public enum Option1 implements Option {
OPTION1_VALUE_1("one"),
OPTION1_VALUE_2("two");
private final String key;
private final String value;
Option1(String val) {
this.key = "key1";
this.value = val;
}
@Override
public String getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
public enum Option2 implements Option {
OPTION2_VALUE_1("aaa"),
OPTION2_VALUE_2("bbb");
private final String key;
private final String value;
Option2(String val) {
this.key = "key2";
this.value = val;
}
@Override
public String getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
Затем я планирую использовать эти "опции" как-то так:
List
Ответ
Первую реализацию можно заменить на более удачную. В Enum можно определять свои конструкторы и методы. Тогда нет необходимости создавать интерфейс и т.п.. Мне кажется это будет наиболее удачным вариантом решения.
public enum Option {
OPTION_1("key 1", "value 1"),
OPTION_2("key 2", "value 2");
private String key;
private String value;
Option(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
}
UPDATE
По поводу использования. Если необходимо пройтись по всем опциям, то есть стандартный метод values()
for (Option op : Option.values()) {
System.out.println(op.getKey() + " - " + op.getValue());
}
Если необходимо оперировать только частью опций, то используйте EnumSet, который предоставляет компактную и быструю структуру данных за счет внутренней реализации в виде битового вектора.
Комментариев нет:
Отправить комментарий