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必须实现抽象方法collat​​eComment(List,String)枚举常量STANDARD必须实现抽象方法collat​​eComment(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

上一篇: Java Decompiler generates abstract enum

下一篇: Compile all files in src?