Простой способ определить перечисление во время выполнения (или время компиляции некоторым промежуточным программным обеспечением) - PullRequest
3 голосов
/ 06 января 2011

Есть ли способ определить набор констант путем загрузки и анализа данных из файла сценария (возможно, файла XML или JSON)?

Я спрашиваю об этом, потому что я интенсивно использую перечисления в проекте, у них много параметров (например, каждая запись может иметь также 10-15 параметров), и я хотел бы дать конечному пользователю способ их изменения без необходимости изменять исходные коды Java и перекомпилировать.

Я не думаю, что это легко возможно, поскольку здесь включена некоторая статическая проверка типов, но, возможно, есть простой способ предварительной обработки файла во время компиляции и использования информации для получения статических значений перечисления. Я знаю, что мог бы просто написать отдельный скрипт для этой работы и создать вывод файла .java, готовый для компиляции, но это будет означать, что пользователю придется перекомпилировать все это.

Ответы [ 5 ]

3 голосов
/ 06 января 2011

Не совсем - см. Можно ли добавить и удалить элементы перечисления во время выполнения в Java для аналогичного вопроса.

Однако вы можете взглянуть на http://groups.google.com/group/h2-database/web/creating-java-enum-objects-at-runtime?pli=1за возможный кладж (на который я не даю никаких гарантий ...)

2 голосов
/ 06 января 2011

Нет - Примитивные / встроенные Enums в Java являются статическими, поэтому они обрабатываются во время компиляции. Вам потребуется создать систему динамических тегов (или самодельных динамических перечислений, например, того, что вы ищете), чтобы достичь такой функциональности.

Удачи!

0 голосов
/ 13 февраля 2015

Хотя это старый вопрос, это может служить: http://java.dzone.com/articles/enum-tricks-dynamic-enums

0 голосов
/ 07 января 2011

Это основано на C #, поэтому YMMV. Если вам необходимо выполнить рефакторинг перечисления, вы можете создать класс со статическими методами, которые будут реплицировать существующие настройки перечисления, и получить новые настройки из Dicitonary, который загружается динамически и доступ к которому осуществляется отдельным методом. Я сделал что-то подобное в C # (и этот SO вопрос). Если вы начинаете с нуля, я бы сказал - не полагайтесь на перечисления.

0 голосов
/ 07 января 2011

Вы не можете. Перечисления по сути являются инструментом для программиста в процессе его разработки.

Даже если бы было возможно добавить новые элементы в перечисление во время выполнения, это не имело бы особого смысла, потому что они не использовались бы вообще. В конце концов, если элемент enum не существует во время компиляции, это означает, что вы не написали никакой логики для обработки этого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...