2014-09-29 247 views
2

我在生產和開發版本中使用java 1.6.0_41。 然而,在生產這條線,即的valueOf()枚舉拋出「不是枚舉類型」

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 2014-09-29 19:49:20

+1

和標識符的代碼 – 2014-09-29 19:49:58

+1

什麼是有效的枚舉值,當發生這種情況時'key'的值是什麼? – m0skit0 2014-09-29 19:50:07

回答

2

這可能是混淆器已改名(甚至刪除)在內部需要使用枚舉類中調用的方法反射。如果該方法已被重命名,反射將不再起作用。

您應該嘗試在沒有混淆器的情況下編譯並運行代碼。如果這樣做,你可以嘗試通過excluding來縮小原因,只有枚舉變得混亂。

特別是我懷疑枚舉的values()方法可能已被混淆。 valueOf在某些時候使用getMethod("values")尋找此方法。

+0

這是問題。枚舉正被混淆。謝謝! – jeemar 2014-09-30 16:15:51