簡體   English   中英

創建抽象枚舉的方法

[英]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.

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