[英]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必須實現抽象方法collateComment(List,String)枚舉常量STANDARD必須實現抽象方法collateComment(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.