Grz*_*nio 8 java enums decompiling
我知道这个问题已被问过gzillions次,但我特意在一个能够正确处理枚举的反编译器之后(因为我反编译的jar使用了很多枚举).我测试过JAD和JD-GUI都没有.
有人可以推荐一个反编译器(理想情况下,它可以在Linux下运行,并且可以轻松处理整个jar而不需要我编写shell脚本)?
编辑:具体来说,我有以下结构的问题:
switch(myEnum) {
case A: ...
case B: ...
}
Run Code Online (Sandbox Code Playgroud)
他们被反编译(对于JAD和JD-GUI)如下所示:
switch ($SWITCH_TABLE$com$MyType()[myEnum.ordinal()]) {
case 1:
case 2:
}
Run Code Online (Sandbox Code Playgroud)
哪里$SWITCH_TABLE$com$MyType()要么根本没有声明要么没有编译.
无法正确反编译枚举开关。java-classfile在编译后不知道enum-Typ,因此您的反编译器无法按照您的意愿反编译它。
枚举类型都是 的子类型java.lang.Enum,每个枚举常量都有一个在 switch 语句中使用的序数。编译器对该 int 值进行切换,对枚举类型的切换简单地说就是语法糖。如果您尝试打开null-enum,您将得到一个 NPE。