Java 如何将枚举添加到枚举列表中并循环遍历它们

Java 如何将枚举添加到枚举列表中并循环遍历它们,java,enums,Java,Enums,我有3个枚举类:ECode、EStatus、EMessage。我想将这三个枚举添加到一个枚举列表中,并循环它们以调用每个枚举类中的方法。我想对它们进行分组,因为这些枚举类中的方法是相同的。例如,下面是我的代码: for (ECode code : ECode.values()) { ECode.forNumericValue(123456); code.toString(); } for (EStatus status: EStatus.valu

我有3个枚举类:ECode、EStatus、EMessage。我想将这三个枚举添加到一个枚举列表中,并循环它们以调用每个枚举类中的方法。我想对它们进行分组,因为这些枚举类中的方法是相同的。例如,下面是我的代码:

for (ECode code : ECode.values()) {
            ECode.forNumericValue(123456);
            code.toString();
}

for (EStatus status: EStatus.values()) {
            EStatus.forNumericValue(123456);
            status.toString();
}

for (EMessage message : EMessage.values()) {
            EMessage.forNumericValue(123456);
            message.toString();
}
我想将其分组如下:

for(Enum enum : listOfEnumClasses()){
    for (enum value: enum.values()) {
         enum.forNumericValue(123456);
         value.toString();
    }
}

谁能给我一个提示,我怎样才能把它存档?谢谢

如果您的所有枚举都实现了一个已知的接口,那么您可以创建一个迭代它们的数组的
Iterable
。然后,可以从枚举的
方法对其进行初始化

interface Common {
    // Chosing `name` here because it exists in all enums - just for simplicity here.
    String name();
}

enum A implements Common{
    One, Two, Three;
}

enum B implements Common{
    Ten, Twenty, Thirty;
}

enum C implements Common{
    Twelve, TwentyFour, ThirtySix;
}

static class Enums<T> implements Iterable<T>{
    private final T[][] enums;

    public Enums(T[]... enums) {
        this.enums = enums;
    }

    @NotNull
    @Override
    public Iterator<T> iterator() {
        return new Iterator<T> () {
            private int i = 0;
            private int j = 0;

            @Override
            public boolean hasNext() {
                return i < enums.length && j < enums[i].length;
            }

            @Override
            public T next() {
                T next = enums[i][j];
                if(++j >= enums[i].length) {
                    i += 1;
                    j = 0;
                }
                return next;
            }
        };
    }
}

private void test() {
    for (Common named : new Enums<Common>(A.values(), B.values(), C.values())) {
        System.out.println(named.name());
    }
}
接口公共{
//在这里选择'name',因为它存在于所有枚举中-只是为了简单起见。
字符串名();
}
枚举A实现公共{
一,二,三,;
}
枚举B实现公共{
十,二十,三十;
}
枚举C实现了公共{
十二,二十四,三十六;
}
静态类枚举实现Iterable{
私有最终T[][]枚举;
公共枚举(T[]…枚举){
this.enums=enums;
}
@NotNull
@凌驾
公共迭代器迭代器(){
返回新的迭代器(){
私有整数i=0;
私有int j=0;
@凌驾
公共布尔hasNext(){
返回i=enums[i].length){
i+=1;
j=0;
}
下一步返回;
}
};
}
}
专用无效测试(){
对于(通用名称:新枚举(A.values()、B.values()、C.values()){
System.out.println(name.name());
}
}

您应该能够通过使用
Iterator…
而不是
T[…
来改进这一点,但我将把它留给您。
listofenumclass()
的元素应该是
Class>
类型,而不是
Enum
(至少因为这是一种原始类型)。然后只需使用
clazz.getEnumConstants()