在 Java 中打开枚举不会转到正确的大小写
Switch on enum in Java does not go to correct case
我正在 Android Studio 中为 Android 编写一些代码,我有一个 class 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 中关于如何打开枚举的教程,我想我已经遵循了。有人有意见吗?
谢谢!
您忘记在 case
子句中添加 break
语句:
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));
如果您不以 break
结束 case
,switch
将调用所有 case
分支,包括 default
分支。 switch
语句的文档可以在 here.
中找到
你需要添加一个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));
}
}
我正在 Android Studio 中为 Android 编写一些代码,我有一个 class 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 中关于如何打开枚举的教程,我想我已经遵循了。有人有意见吗?
谢谢!
您忘记在 case
子句中添加 break
语句:
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));
如果您不以 break
结束 case
,switch
将调用所有 case
分支,包括 default
分支。 switch
语句的文档可以在 here.
你需要添加一个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));
}
}