2014-09-29 9 views
2

Я использую как java 1.6.0_41 в производстве и dev строит. Тем не менее, в производстве этой линии, а именно valueOf():Enum Throws «Не является типом Enum»

List<Identifier> identifiers = new ArrayList<Identifier>(); identifiers.add(Identifier.valueOf(key));

бросает не является перечисление. Идентификатор - это перечисление.

Вот трассировка стека.

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: com.core.datamodel.Identifier is not an enum type at java.lang.Class.enumConstantDirectory(Unknown Source) at java.lang.Enum.valueOf(Unknown Source) <Break in method call trace. Could be due to JIT compiler inlining of method.>

Мы используем ZKM как обфускатор и поэтому, возможно, что это проблема?

public enum Identifier {FOO}

Я прохожу в ключевой строке FOO и надеемся получить Identifier.FOO

+2

Можете ли вы опубликовать всю трассировку стека? – August

+1

И код для идентификатора –

+1

Что такое действительные значения перечисления и каково значение 'key', когда это происходит? – m0skit0

ответ

2

Возможно, что обфускатор переименовала (или даже удалены) методы, которые должны внутренне называться классом перечислений с использованием отражения. Отражения больше не будут работать, если метод был переименован.

Вы должны попытаться скомпилировать и запустить код без обфускатора. Если это сработает, вы можете попытаться сузить причину на excluding только перечисление от обфускации.

В частности, я подозреваю, что метод enum values() может быть запутан. valueOf в какой-то момент ищет этот метод, используя getMethod("values").

+0

Это проблема. Перетоки запутываются. Благодаря! – jeemar

Смежные вопросы