给出表单中的简单if语句
public static String test(boolean flag) {
if (!flag) {
return "no";
} else {
System.out.println("flag enabled");
}
return "yes";
}
Run Code Online (Sandbox Code Playgroud)
要么
public static String test(final boolean flag)
{
if (flag)
{
System.out.println("flag enabled");
return "yes";
}
else
{
return "no";
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse给了我警告,强调整个其他块
声明不必要地嵌套在else子句中.相应的then子句不能正常完成
但是,这......
public static String test(final boolean flag)
{
if (flag)
{
System.out.println("flag enabled");
return "yes";
}
return "no";
}
Run Code Online (Sandbox Code Playgroud)
没有发出警告.
这个问题似乎有关系,但我没有在第一个例子的其他地方使用return,否则最终没有.
我知道这只是一个偏好,它可以被关闭.但是,我不喜欢忽视事情只是因为我不明白是什么问题.而且我似乎找不到任何关于为什么Eclipse将其添加为可配置警告的文档.
总而言之,The corresponding then clause does not complete normally意味着什么?这个警告试图保护我的问题是什么?
pkp*_*pnd 14
您可以删除该else子句,这将删除警告.
要回答你的另一个问题,"相应的then子句没有正常完成"是指"then"子句有一个return语句.完成"正常"意味着控制流继续到"else"块之后的语句,但这不会发生,因为您返回.
以下各项之间没有逻辑,功能或运行时差异:
// Gets warning
public static String test(final boolean flag) {
if (flag) {
System.out.println("flag enabled");
return "yes";
} else {
return "no";
}
}
Run Code Online (Sandbox Code Playgroud)
和
// Doesn't get warning
public static String test(final boolean flag) {
if (flag) {
System.out.println("flag enabled");
return "yes";
}
return "no";
}
Run Code Online (Sandbox Code Playgroud)
所以归结为风格偏好.Eclipse为什么认为这值得警告?可以认为它类似于"无法访问的代码" - 代码的一个方面是不必要的(也许是异常的)冗长的,这通常需要另外一种方法来确保不会隐藏任何逻辑错误.如果我编写第一个代码片段并收到警告,我会感谢Eclipse并愉快地改进代码,到达第二个代码片段.但同样,那只是因为我更喜欢第二个片段.
这是一个可能发挥作用并影响功能的场景(无意中).假设代码最初看起来像这样:
// Returns true if the dog was fed
boolean feedDog(Dog dog) {
if (!dog.isHungry()) {
return false;
}
Food food;
if (dog.isBadToday()) {
food = getDefaultFood();
} else {
food = getTreat();
}
dog.feed(food);
return true;
}
Run Code Online (Sandbox Code Playgroud)
一段时间后,该团队认为feedDog应该只返回true,如果狗喂食治疗.如果代码被修改为:
// Returns true if the dog was fed *a treat*
boolean feedDog(Dog dog) {
if (!dog.isHungry()) {
return false;
}
Food food;
if (dog.isBadToday()) {
food = getDefaultFood();
return false; // Dog wasn't fed a treat
} else {
food = getTreat();
}
dog.feed(food);
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在有一个错误,因为程序员进行了"乍一看"的最短变化 - 如果行为不端,那只可怜的狗就不会被喂食.Eclipse的警告是在这里拯救狗,告诉程序员注意if语句周围的逻辑,这似乎不再正确(根据Eclipse).希望程序员注意警告并避免从if块中返回:
// Returns true if the dog was fed *a treat*
boolean feedDog(Dog dog) {
if (!dog.isHungry()) {
return false;
}
Food food;
boolean fedTreat = false;
if (dog.isBadToday()) {
food = getDefaultFood();
} else {
food = getTreat();
fedTreat = true;
}
dog.feed(food);
return fedTreat;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |