Java switch 语句中的方法范围
Method scope inside Java switch statement
这个问题是从我的 以一种相当松散的方式提出来的。这里的上下文是构建 Android 配置了 Phonegap CLI 的 APK,通过 build-extras.gradle
使用 Java 7。这是我的代码
public boolean execute(String action, JSONArray data,
CallbackContext cbc) throws JSONException
{
Context ctxt = cordova.getActivity().getApplicationContext();
// return doSave(data,cbc,ctxt);
//the above compiles correctly
//doSave is a private method in the same class
switch(action)
{
case "save":return doSave(data,cbc,ctxt);break;
//the compiler complains about an `unreachable statement`
//other case statements ommitted for clarity
default:cbc.error("Unknown action: " + action);return false;
}
return false;
//without this return the compiler is upset.
}
我在理解这里的两个问题时遇到一些困难
- 据我所知,即使没有最后一个
return
,由于 switch...default
子句,我已经定义了一条清晰的执行路径,所以我不明白为什么它需要 return在那里声明
- 所以在
switch
语句中,同一个 class 中的私有 doSave
方法不知何故变得不可见了?
在我只做了 JS 和 PHP 的很长一段时间后,我将回到 Java。但是,我一次完成了大量 Delphi 编码,因此我很欣赏 Java 编译器强加的严谨性。在这种情况下,尽管在我看来它有点过分。还是我误解了什么?
return doSave(data,cbc,ctxt);break;
您的 break
语句无法访问。
您应该删除该语句,以及最后的 return false;
语句,后者也是无法访问的。
这个问题是从我的 build-extras.gradle
使用 Java 7。这是我的代码
public boolean execute(String action, JSONArray data,
CallbackContext cbc) throws JSONException
{
Context ctxt = cordova.getActivity().getApplicationContext();
// return doSave(data,cbc,ctxt);
//the above compiles correctly
//doSave is a private method in the same class
switch(action)
{
case "save":return doSave(data,cbc,ctxt);break;
//the compiler complains about an `unreachable statement`
//other case statements ommitted for clarity
default:cbc.error("Unknown action: " + action);return false;
}
return false;
//without this return the compiler is upset.
}
我在理解这里的两个问题时遇到一些困难
- 据我所知,即使没有最后一个
return
,由于switch...default
子句,我已经定义了一条清晰的执行路径,所以我不明白为什么它需要 return在那里声明 - 所以在
switch
语句中,同一个 class 中的私有doSave
方法不知何故变得不可见了?
在我只做了 JS 和 PHP 的很长一段时间后,我将回到 Java。但是,我一次完成了大量 Delphi 编码,因此我很欣赏 Java 编译器强加的严谨性。在这种情况下,尽管在我看来它有点过分。还是我误解了什么?
return doSave(data,cbc,ctxt);break;
您的 break
语句无法访问。
您应该删除该语句,以及最后的 return false;
语句,后者也是无法访问的。