簡體   English   中英

Java通用枚舉

[英]Java generic Enum

對於我在Swing中的圖標我有不同的枚舉,如:

    public enum Icon32 {
    STOP("resources/icons/x32/stop.ico"),
    RUN("resources/icons/x32/run.ico");
    private File path;

    private Icon32(String path) {
        this.path = new File(path);
    }

    public File getFile() {
        return path;
    }

要么

public enum Tab {
    XML("resources/icons/x32/tab/tab_1.ico"), QR("resources/icons/x32/tab/tab_2.ico"),ABOUT("resources/icons/x32/tab/tab_3.ico");
    private File path;

    private Tab(String path) {
        this.path = new File(path);
    }

    public File getFile() {
        return path;
    }

}

我創建了一個抽象實現:

public abstract class AbstractImageType {

private File path;

private AbstractImageType(String path) {
    this.path = new File(path);
}

public File getFile() {
    return path;
}

@Override
public String toString() {
    return path.toString();
}

}

但Enum無法擴展:

Syntax error on token "extends", implements expected

現在我的問題是,是否可以創建一個通用類“AbstractImageType”來實現方法和構造函數? 所以我只想插入枚舉值?

像這樣的東西:

 public enum Icon32 extends AbstractImageType {
    STOP("resources/icons/x32/stop.ico"),
    RUN("resources/icons/x32/run.ico");
}

java中的枚舉不支持類的繼承,因為每個enum實際上都是一個擴展Enum的簡單類。 由於不支持多重繼承,因此無法為2個枚舉創建基類。

您可以為此目的停止使用枚舉,即切換到常規類或使用委托創建File,即接受枚舉成員並返回File實例的實用程序。

您可以將AbstractImageType作為一個接口,讓您的枚舉實現該接口。

public interface AbstractImageType {

    File getFile();
}

public enum Icon32 implements AbstractImageType  {
    STOP("resources/icons/x32/stop.ico"),
    RUN("resources/icons/x32/run.ico");
    private File path;

    private Icon32(String path) {
        this.path = new File(path);
    }

    public File getFile() {
        return path;
    }
}

不幸的是,它不可能對枚舉使用任何類型的繼承,因為它會破壞Liskov替換原則 Java 8將在接口中具有方法的默認實現 ,但它們可能不會擴展到構造函數。

您可以做的最好的事情就是生成代碼,例如在eclipse中使用自定義模板

暫無
暫無

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

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