我知道你可以拥有像
这样的东西public enum letters{
A, B, C, D
}
然后有一个类似于每个字母都有自己的类和方法
switch(letters)
case A:
A.methodA();
break;
case B:
B.methodB();
break;
case C:
C.methodC();
break;
case D:
D.methodD();
break;
default:
System.out.println("Learn the alphabet");
但你能否拥有类似
的东西switch(listOfLetterEnums)
...
在我的程序中,我将命令行枚举参数转换为列表,我需要知道如何从该列表中运行每个枚举的方法,无论它是switch语句还是其他东西。
我应该在尝试时添加一个错误,说“无法转换List。只有可转换的int值或枚举变量”才会转换为枚举列表,如果以上是可能的
答案 0 :(得分:2)
您需要在switch语句周围放置一个for循环,以分别解析列表中的每个元素。如果列表是Iterable,那么它应该如下所示:
for (letterEnum : listOfLetterEnums) {
switch(letterEnum) {
...
}
}
为此,您的列表需要实现Iterator接口或扩展实现它的类。在这种情况下,您可能希望扩展ArrayList。
如果列表是一个数组,你可以解析数组的每个元素:
for (int i = 0; i < listOfLetterEnums.length; i++) {
switch(listOfLetterEnums[i]) {
...
}
}
答案 1 :(得分:0)
public class Test {
private enum Foo {
ABC, DEF;
}
public static void main(String... args) {
List<Foo> myfoos = new ArrayList<Foo>();
myfoos.add(Foo.ABC);
for(Foo i:myfoos)
switch (i) {
case ABC:
System.out.println("do abc");
break;
case DEF:
System.out.println("do def");
break;
}
}
}
答案 2 :(得分:0)
您需要遍历列表,并根据值进行切换。
letters[] listOfLetterEnums = { letters.A, letters.B, letters.C, letters.D };
for(letter let : listOfLetterEnums)
{
switch(let)
{
case A:
A.methodA();
break;
case B:
B.methodB();
break;
case C:
C.methodC();
break;
case D:
D.methodD();
break;
default:
System.out.println("Learn the alphabet");
}
}