[英]The way to create abstract enum
我有一些枚舉,它有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();
}
接下來,添加到此interfce的所有枚舉實現:
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.