我使用JD反编译了一个.jar可执行文件。我遇到了一个无法编译的抽象枚举代码:
private static abstract enum Type {
ANONYMOUS(4) , STANDARD(0);
private final int start;
private Type(int start) {
this.start = start;
}
public int getStart() {
return this.start;
}
public abstract void insertHeader(Sheet paramSheet,
SummaryCodec.Style paramStyle, float paramFloat1,
float paramFloat2);
public abstract String insertCommentSource(String paramString);
public abstract int insertBreakdown(Sheet paramSheet,
SummaryCodec.Style paramStyle, String paramString,
Entry paramEntry, int paramInt);
public abstract void collateComment(List<String> paramList,
String paramString);
}
编译器错误: 成员枚举类型的修饰符非法;只允许 public、protected、private 和 static 枚举常量 ANONYMOUS 必须实现抽象方法 collateComment(List, String) 枚举常量 STANDARD 必须实现抽象方法 collateComment(List, String)
在哪里可以找到 ANONYMOUS 和 STANDARD 抽象方法的实现代码?我在同一个文件中找不到它。尝试在其他文件中查找它。
最佳答案
JD 显然在使用抽象方法反编译枚举时存在错误;你不应该获得该类签名(它确实对应于字节码,但没有考虑 Java 编译器对 enum
所做的魔力)。
每个覆盖声明方法的枚举实例都会获得自己的 .class
文件,就像匿名类一样。在与 Type.class
相同的目录中查找名为 Type$1.class
的文件。
关于Java Decompiler 生成抽象枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27837725/