创建抽象枚举的方法



我有一些枚举,它有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

最新更新