如何将枚举添加到枚举列表并遍历它们

时间:2018-09-07 11:45:46

标签: java enums

我有3个Enum类:ECode,EStatus,EMessage。我想将这三个Enum添加到Enum列表中,并循环遍历每个Enum类中的方法。我想对它们进行分组,因为这些Enum类内部的方法是相同的。例如,下面是我所拥有的代码:

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

任何人都可以给我提示如何存档吗?谢谢

1 个答案:

答案 0 :(得分:0)

如果所有枚举都实现了一个已知的接口,则可以创建一个Iterable,它在它们的数组中进行迭代。然后,您可以从枚举的values方法中对其进行准备。

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

您应该能够使它采用Iterator<T>...而不是T[]...来改善这一点,但我会留给您。