2013-05-22 160 views
2

對於我在Swing圖標我不同的枚舉,如:Java的泛型枚舉

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不可能擴展nd:

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"); 
} 

回答

6

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

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

5

你可以讓你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; 
    } 
}