我有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();
}
}
任何人都可以给我提示如何存档吗?谢谢
答案 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[]...
来改善这一点,但我会留给您。