对于我在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");
}
答案 0 :(得分:6)
java中的枚举不支持类的继承,因为每个enum
实际上都是一个扩展Enum
的简单类。由于不支持多重继承,因此无法为2个枚举创建基类。
您可以为此目的停止使用枚举,即切换到常规类或使用委托创建File,即接受枚举成员并返回File
实例的实用程序。
答案 1 :(得分: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;
}
}
答案 2 :(得分:4)
不幸的是,它不可能对枚举使用任何类型的继承,因为它会破坏Liskov Substitution Principle。 Java 8在接口中将有default implementations个方法,但它们可能不会扩展到构造函数。
你可以做的最好的事情就是生成代码,例如在eclipse中使用custom templates。