你可以在java 6中使用带有枚举列表的switch语句吗?

时间:2014-07-31 16:54:21

标签: java enums command-line-arguments

我知道你可以拥有像

这样的东西
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值或枚举变量”才会转换为枚举列表,如果以上是可能的

3 个答案:

答案 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");
    }
}