适用于 Java 5 的 Java 反编译器(处理枚举等新事物)

标签 java enums decompiling

我知道这个问题已经被问过无数次了,但我特别关注一个可以正确处理枚举的反编译器(因为我正在反编译的 jar 大量使用枚举)。我测试了JAD和JD-GUI都没有。

有人可以推荐一个反编译器(最好是在 Linux 下工作并且可以轻松处理整个 jar 而不需要我编写 shell 脚本)?

编辑: 具体来说,我对以下结构有疑问:

switch(myEnum) {
case A: ...
case B: ...
}

它们被反编译(对于 JAD 和 JD-GUI)如下:

switch ($SWITCH_TABLE$com$MyType()[myEnum.ordinal()]) {
case 1:
case 2:
}

其中 $SWITCH_TABLE$com$MyType() 根本未声明或未编译。

最佳答案

不可能正确地反编译枚举开关。 java-classfile 不知道编译后的 enum-Typ,因此你的反编译器不能按你喜欢的方式反编译它。

枚举类型都是 java.lang.Enum 的子类型,每个枚举常量都有一个序号,用于 switch 语句。编译器对该 int 值进行切换,对枚举类型的切换简单地说是句法糖。如果您尝试打开一个 null-enum,您将得到一个 NPE。

关于适用于 Java 5 的 Java 反编译器(处理枚举等新事物),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874887/

相关文章:

android - 反编译APK并在android studio中导入

java - 如何在 JSP 页面中打印错误堆栈跟踪?

java - Android:从 EmojiconEditText 获取表情符号

c++ - 带有枚举解释的隐式非运算符(!)?

arrays - 在 TypeScript/Angular2 中将 Int 数组转换为枚举

java - 如何在 Python 中实现类似 Java 的枚举?

java - 如何反编译成java文件 intellij idea

java - Controller 上的 Spring @RequestMapping

java - hibernate.cfg.xml 中的 Hibernate connection.url - 处理多个参数

java - 为什么不加密 Java 字节码而不是混淆它呢?