Java Decompiler 生成抽象枚举

标签 java

我使用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 显然在使用抽象方法反编译枚举时存在错误;你不应该获得该类签名(它确实对应于字节码,但没有考虑 Java 编译器对 enum 所做的魔力)。

每个覆盖声明方法的枚举实例都会获得自己的 .class 文件,就像匿名类一样。在与 Type.class 相同的目录中查找名为 Type$1.class 的文件。

关于Java Decompiler 生成抽象枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27837725/

相关文章:

java - 使用 Executors.defaultThreadFactory().newThread 的原因是什么?

Java Swing透明无限加载/加载动画闪烁

java - JTextComponent.print();打印空白

java - Java Web 应用程序(.war) 中的许可证

java - 两个不同时区之间的时差计算?

java - 抽象类

java - 在 Android EditText 中,有没有办法强制每个字符为小写?

java - 如何将 Observable.fromIterable 中的项目索引传递给 subscribe 方法中的 onNext ?

java - Groovy:是否可以放弃保留字?

java - Eclipse:有没有办法区分 jar 和项目?