在Java中启用枚举并不是正确的情况

时间:2015-03-24 07:38:49

标签: java android enums switch-statement

我在Android Studio中为Android做了一些编码,我有一个带有私有枚举的类TaskType,我用getTaskType提取,如下面的代码所示:

public class TaskType {
    public enum taskType {NOT_SET, LOGIN_TASK, GET_USER_DETAILS_TASK}
    private taskType theTaskType= taskType.NOT_SET;

    public TaskType(taskType taskType){
        this.theTaskType= taskType;
    }

    public taskType getTaskType() {
        return theTaskType;
    }

    public void setTaskType(taskType newTaskType) {
        theTaskType = newTaskType;
    }
}

然后我将一个实例作为参数传递给回调并尝试打开它,如下面的代码所示:

public void callbackOnPostExecute(TaskType taskType){
    switch(taskType.getTaskType()){
        case LOGIN_TASK:
            mListener.callback(loginNetworkHelper);
        default:
            Log.e(TAG, "Unknown task type: " + taskType.getTaskType());
            error.setError(ErrorHelper.error.UNKNOWN_ERROR);
            mListener.callback(new NetworkHelper(error));
    }
}

这似乎编译得很好,Android Studio甚至突出了LOGIN_TASK紫色,就好像它知道它是什么。但是,开关直接用于默认情况,我的Log.e语句具有输出:

03-24 07:23:43.870    2636-2636/com.mydomain.myproject E/NetworkInterface﹕ Unknown task type: LOGIN_TASK

这使得它看起来好像正在使用正确的枚举值,但由于某些原因而无法被LOGIN_TASK案例识别。

我已经在这个问题上做了很多搜索,但是我可以提出的是如何在Java中开启一般枚举的教程,我认为我已经遵循了。有人有任何意见吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

您忘了在break条款中添加case声明:

case LOGIN_TASK:
    mListener.callback(loginNetworkHelper);
    break;

default:
    Log.e(TAG, "Unknown task type: " + taskType.getTaskType());
    error.setError(ErrorHelper.error.UNKNOWN_ERROR);
    mListener.callback(new NetworkHelper(error));

如果您不使用case break结束switch,则会调用所有case分支,包括default分支。可以找到switch语句的文档here

答案 1 :(得分:0)

您需要添加break语句,否则它将始终以默认情况结束。

public void callbackOnPostExecute(TaskType taskType){
    switch(taskType.getTaskType()){
        case LOGIN_TASK:
            mListener.callback(loginNetworkHelper);
            break; // put a break here, and do this for every case clause other than default one. 
        default:
            Log.e(TAG, "Unknown task type: " + taskType.getTaskType());
            error.setError(ErrorHelper.error.UNKNOWN_ERROR);
            mListener.callback(new NetworkHelper(error));
    }
}