Нет. Перечисления всегда фиксируются во время компиляции. Единственный способ сделать это - сгенерировать соответствующий байт-код динамически.
Сказав это, вы, вероятно, должны решить, какие аспекты перечисления вам действительно интересны. Предположительно, вы не хотели использовать оператор switch
над ними, поскольку это означало бы статический код, а вы не t знать значения статически ... также любые другие ссылки в коде.
Если вам действительно нужна карта от String
до Integer
, вы можете просто использовать Map<String, Integer>
, который вы заполняете во время выполнения, и все готово. Если вам нужны функции EnumSet
, их будет несколько сложнее воспроизвести с той же эффективностью, но это может быть осуществимо с некоторыми усилиями.
Итак, прежде чем идти дальше с точки зрения размышлений о реализации, я предлагаю вам разобраться, каковы ваши реальные требования.
(РЕДАКТИРОВАТЬ: я предполагал, что это перечисление является полностью динамическим, т. Е. Что вы не знаете имен или даже сколько их значений. Если набор имен фиксирован, и вы только нужно получить идентификатор из базы данных, это совсем другое дело - см. ответ Андреаса .)