如何在Java中创建switch块?

use*_*290 0 java

我有2个类:在第一个类中我有返回int值的静态方法,以及const - NETWORK_EXCEPTION(public static final int NETWORK_EXCEPTION = 1),在第二个类中我从静态方法返回值并将其用于switch块:

int response=NetworkUtilities.addNewUser(email, name, number);
switch (response) {
    case (NetworkUtilities.NETWORK_EXCEPTION):
        break;
} 
Run Code Online (Sandbox Code Playgroud)

但我总是得到以下消息:"case表达式必须是常量表达式".如何创建交换机块?可能我需要使用枚举?请给我一个例子或修改我的代码.

public static int NETWORK_EXCEPTION=-1;
public static int EXIST_EXCEPTION=0;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

编辑:现在你已经发布了声明,很清楚:

public static int NETWORK_EXCEPTION=-1;
public static int EXIST_EXCEPTION=0;
Run Code Online (Sandbox Code Playgroud)

应该

public static final int NETWORK_EXCEPTION=-1;
public static final int EXIST_EXCEPTION=0;
Run Code Online (Sandbox Code Playgroud)

注意final部分 - 没有它们,它们不是常量.(在您之前的问题文本中,您声称已将其声明为final- 确切地说这是值得的:)

顺便说一下,鉴于您使用包含"异常"的名称来声明这些,您确定不应该只是抛出异常吗?


那绝对应该没问题.简短但完整的程序演示:

class Constants {
    public static final int NETWORK_EXCEPTION = 1;
}

public class Test {
    public static void main(String[] args) {
        int value = Integer.parseInt(args[0]);

        switch (value) {
            case Constants.NETWORK_EXCEPTION:
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

确定它被宣布为final?用一个值1而不是一些方法调用的结果?

如果你可以发布一个类似的短但完整的程序失败,那将有所帮助.