我使用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);
}
编译器错误: 成员枚举类型的非法修饰符;只有公共的,受保护的,私人的和允许静态 枚举常量ANONYMOUS必须实现抽象方法collateComment(List,String) 枚举常量STANDARD必须实现抽象方法collateComment(List,String)
在哪里可以找到ANONYMOUS和STANDARD抽象方法实现的代码?我在同一个文件中找不到它。试图在其他文件中寻找它。
答案 0 :(得分:4)
enum
所做的魔术)。
覆盖声明的方法的每个枚举实例都会获得自己的.class
文件,就像匿名类一样。在与Type$1.class
相同的目录中查找名为Type.class
的文件。
答案 1 :(得分:0)
制作抽象枚举没有意义,因为你肯定会有实例。 事实上,ANONYMOUS和STANDARD是枚举类型的实例,这也是编译器告诉您必须实现抽象方法insertCommentSource的原因。
我不知道为什么反编译器生成了这个代码,但我非常确定这不符合Java语言规范!它也没有意义;)