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