EnumMap vs Properties

Есть ли у кого мысли о том, что лучше, EnumMap или же Properties (или, по крайней мере, в моей ситуации?) Я использую сторонний программный пакет, который связывается между моим кодом и их приложением, используя их метод следующим образом:

TheirRuntime.getInstance().getParameter(String paramName)

В настоящее время я создал enum это работает так:

public enum MyEnum {
    FOO_BAR ("fooBar"), BAZ_QUUX ("bazQuux");

    private final String varName;
    private MyEnum(String varName) {
        this.varName = varName();
    }
    public String varName() {
        return varName();
    }
}

Затем я храню значения в EnumMap<MyEnum, Double>, который обновляется, когда пользователь что-то меняет. Моя архитектура немного сложнее, чем эта, но я опускаю некоторые детали ради SSCCE. Хотя я упомяну, что я загружаю значения примерно так:

for (MyEnum me : MyEnum.values()) {
     TheirRuntime.getInstance().getParameter(me.varName());
}

Что мне интересно, так это имеет ли смысл использовать Properties? Этот вопрос возник, потому что я пытаюсь создать тестовую среду, которая вообще не включает стороннее программное обеспечение, и я пытаюсь найти хороший, простой способ загрузки параметров, которые не используют какие-либо 3-ий сторонние вызовы API и Properties файл кажется простым способом, который заставляет меня задуматься, стоит ли мне просто использовать Properties в основном классе.

Мысли?

2 ответа

Решение


Преимущества Enum очевидны:
Он предоставляет вам перечисление литералов. Вы можете использовать их для выявления проблем с "неправильным ключом" на уровне компиляции.
Свойства позволяют вам гибкость - например, вы можете прочитать их из файла.
Большой вопрос - насколько вы уверены, что набор литералов, предоставляемых enum, фиксирован и не изменится?
Например, наша система имеет набор значений enum, и, поскольку мы являемся проектом с открытым исходным кодом, мы хотели бы создать над ним плагин, который теоретически должен был бы использовать значения enum,
Но создатели плагинов не смогут использовать исходное перечисление, так как оно имеет фиксированный набор литералов, поэтому либо мы изменяем наше перечисление на объект свойств, и позволяем авторам подключаемых модулей регистрировать свои "литералы",
или мы должны предоставить дополнительную систему для нашего перечисления.
Я сожалею, что у меня нет "четкого" решения здесь.

Основное различие между использованием EnumMap и простых свойств (которые также являются "картой под капотом") заключается в том, что первый будет обеспечивать допустимые значения ключей, которые могут храниться в данной карте, в то время как свойства позволят использовать любые строки для этих ключей.,

Другие вопросы по тегам