Java Decompiler生成抽象枚举
我用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显然有一个用抽象方法反编译枚举的bug; 你不应该得到那个类签名(它对应于字节码,但没有考虑到Java编译enum
做的魔术)。
每个覆盖已声明方法的枚举实例都会获得自己的.class
文件,就像匿名类一样。 查找名为像文件Type$1.class
在同一目录Type.class
。
做一个抽象枚举没有意义,因为你一定会有实例。 事实上,ANONYMOUS和STANDARD是枚举类型的实例,这也是编译器告诉你必须实现抽象方法insertCommentSource的原因。
我不知道为什么反编译器生成这段代码,但我确信这不符合Java语言规范! 也没有意义;)
链接地址: http://www.djcxy.com/p/96755.html