创建抽象枚举的方法

时间:2015-11-02 11:55:41

标签: java enums

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

4 个答案:

答案 0 :(得分:4)

您无法从抽象基类派生枚举,但枚举可以实现接口。以下是您的问题的解决方案:

您创建了一个界面<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form action="test.php" method="post" enctype="multipart/form-data" id="test-form" novalidate> <input name="table[]" type="checkbox" value="university" id="university"/> University<br> <input type="checkbox" disabled="true" class="uni" value="1" /> A<br> <input type="checkbox" disabled="true" class="uni" value="2" /> B<br> <input type="checkbox" disabled="true" class="uni" value="3" /> C<br> <input type="checkbox" disabled="true" class="uni" value="3" /> D<br> <input name="table[]" type="checkbox" value="buildings" /> Buildings<br> <input name="table[]" type="checkbox" value="offices" /> Offices<br> <input name="table[]" type="checkbox" value="halls" /> Halls<br> <input name="table[]" type="checkbox" value="labs" /> Labs<br> <input name="table[]" type="checkbox" value="studios" /> Studios<br> <input name="table[]" type="checkbox" value="machines" /> Machines<br> <input name="table[]" type="checkbox" value="facilities" /> Facilities<br> </form>

Descriptable

让所有枚举实现此接口:

 public interface Descriptable {
      public String getDescription();
 }

然后像这样写输出函数:

 public enum Test implements Descriptable {

答案 1 :(得分:3)

枚举可以实现接口:

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;
    }
}

答案 2 :(得分:3)

首先,使用所需方法定义界面

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);
}

答案 3 :(得分:0)

不,我们不能使用抽象枚举,所有枚举类型都会扩展枚举,并且默认情况下它们是最终的。由于Java不支持多重继承,因此枚举不能扩展其他任何内容。

然而,枚举可以实现Interface