簡體   English   中英

Java Decompiler生成抽象枚舉

[英]Java Decompiler generates abstract enum

我使用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必須實現抽象方法collat​​eComment(List,String)枚舉常量STANDARD必須實現抽象方法collat​​eComment(List,String)

在哪里可以找到實現ANONYMOUS和STANDARD抽象方法的代碼? 我在同一文件中找不到。 試圖在其他文件中尋找它。

JD顯然有一個用抽象方法反編譯枚舉的錯誤。 您不應該獲得該類簽名(它確實與字節碼相對應,但沒有考慮Java編譯器對enum的神奇作用)。

重寫匿名方法的每個枚舉實例都會獲得自己的.class文件,就像匿名類一樣。 查找名為像文件Type$1.class在同一目錄Type.class

進行抽象枚舉沒有任何意義,因為您肯定會有實例。 實際上,ANONYMOUS和STANDARD是枚舉類型的實例,這也是為什么編譯器告訴您必須實現抽象方法insertCommentSource的原因。

我不知道為什么反編譯器會生成此代碼,但是我非常確定這不符合Java語言規范! 也沒有意義;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM