#java #ооп
Разрабатываю приложение на 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
Ответы
Ответ 1
Первую реализацию можно заменить на более удачную. В 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, который предоставляет компактную и быструю структуру данных за счет внутренней реализации в виде битового вектора.
Комментариев нет:
Отправить комментарий