我有一些枚举,它有getDescription()
方法:
public enum Test {
QWE ("qwe"),
ASD ("asd"),
ZXC ("zxc");
private final String description;
Test(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
public enum Test1 {
RTY("rty");
private final String description;
Test1(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
有可能创建一些抽象枚举或接口吗?可以写这样的东西吗?
public void outputDescriptions(AbstractEnumType abstractEnumType) {
for(Enum enum: abstractEnumType.values()) {
System.out.println(enum.getDescription());
}
}
和outputDescriptions(Test)
的输出
qwe
asd
zxc
不能从抽象基类派生枚举,但枚举可以实现接口。以下将是您的问题的解决方案:
您创建了一个接口Descriptable
public interface Descriptable {
public String getDescription();
}
让你所有的枚举实现这个接口:
public enum Test implements Descriptable {
然后写这样的输出函数:
public <T extends Enum<T> & Descriptable> void outputDescriptions(Class<T> tclass) {
for(T t: tclass.getEnumConstants())
System.out.println(t.getDescription());
}
枚举可以实现接口:
interface Descr {
String getDescription();
}
enum Test implements Descr {
QWE ("qwe"),
ASD ("asd"),
ZXC ("zxc");
private final String description;
Test(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
首先,用所需方法定义接口
interface DescriptionableEnum {
String getDescription();
}
接下来,将这个函数的所有枚举实现添加到:
enum Test implements DescriptionableEnum {...}
enum Test1 implements DescriptionableEnum {...}
这个功能将帮助您:
public static void outputDescriptions(Class<? extends DescriptionableEnum> abstractEnumType) {
if (abstractEnumType.isEnum()) {
DescriptionableEnum[] values = abstractEnumType.getEnumConstants();
for (DescriptionableEnum value : values) {
System.out.println(value.getDescription());
}
}
}
主要测试方法:
public static void main(String[] args) {
outputDescriptions(Test.class);
outputDescriptions(Test1.class);
}
不,我们不能有抽象枚举,所有枚举类型都扩展了enum,默认情况下它们是最终的。由于Java不支持多重继承,枚举不能扩展任何其他内容。
但是,枚举可以实现Interface
。