在switch/case语句中使用列表中的值作为案例

4

我有一个ArrayList,其中包含以下字符串: [name, age, gender, salary]是否有一种方法可以使用我的ArrayList中的值作为case表达式? 显然答案是否定的,因为case表达式必须是常量表达式。但是,如果我不能使用switch / case,我想知道最好的方法是什么。

明确一下,预期的行为类似于这样:

switch (parameter) {
    case XXX:
        // some code here
    case YYY:
        // some code here
}

我希望XXX是名字,YYY是性别,它们都来自ArrayList。如果无法使用switch/case,我可以考虑使用if/else。我该怎么做?谢谢。


你的列表长度是否总是相同的? - Hayden Passmore
@HaydenPassmore 是的。但元素的顺序可能会改变。 - user8543721
好的,你希望你的 case 表达式与列表顺序相同吗? - Hayden Passmore
case表达式的顺序无关紧要。 - user8543721
你可以使用if/else代替switch/case。 - Thành Kim Nguyễn
你为什么要使用 ArrayList?它的用途是什么? - user207421
1个回答

3
如果您真的想使用 switch case 并且不能使用非本机 Java 对象,我建议尝试以下这种方法:
public void test(){

    String[] array = {"name", "age", "gender", "salary"};

    String value = "name";

    switch(indexOf(value, array)){
        case 0:
            //code
            break;
        case 1:
            //code
            break;
        case 2:
            //code
            break;    
        case 3:
            //code
            break;
        default:
            //value wasnt in array
    }
}

public int indexOf(String value, String[] array){
    for(int i = 0; i < array.length; i++){
        if(array[i].equals(value)){
            return i;
        }
    }
    //return a place holder value
    return -1;
}

1
我不能评论其他人的帖子,因为我的声望太低,但是Hayden的解决方案无法编译,因为字符串仍然不是常量。 - luckydog32
你的意思是“不是常量”? - Hayden Passmore
1
基本上,值可以在运行时更改,这不是Java在case switch中支持的。您可以通过使用final关键字来解决此问题,这将使变量的值无法更改。 - luckydog32
1
好的,谢谢。我在尝试提供一个概念证明时忽略了那个。发现得好 :-) - Hayden Passmore
@Hayden Passmore,你最后的编辑还是不太对。由于无法更改final变量的值,所以你不能像这样做:final String WWW = yourArrayList.get(0); - luckydog32
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接