The corresponding then clause does not complete normally
在表单中给出一个简单的if语句
1 2 3 4 5 6 7 8 |
或
1 2 3 4 5 6 7 8 9 10 11 12 |
Eclipse给了我警告,强调了整个其他块
Statement unnecessarily nested within else clause. The corresponding then clause does not complete normally
然而,这…
1 2 3 4 5 6 7 8 9 |
不给出警告。
这个问题似乎有关联,但在第一个示例的其他部分中,我没有使用RETURN,否则就不是最后一个。
我知道这只是一个简单的偏好,它可以被关闭。但是,我不喜欢仅仅因为我不明白问题出在哪里而忽视事情。我似乎找不到任何关于Eclipse为什么将此添加为可配置警告的文档。
总而言之,
您可以删除
要回答您的另一个问题,"相应的then子句不能正常完成"是指"then"子句有一个返回语句。完成"通常"意味着控制流在"else"块之后继续执行语句,但这不会在返回后发生。
以下各项之间没有逻辑、功能或运行时差异:
1 2 3 4 5 6 7 8 9 |
和
1 2 3 4 5 6 7 8 |
所以归根结底就是一种风格偏好。为什么Eclipse认为这值得警告?把它想象成类似于"不可到达的代码"——代码的一个方面是不必要的(可能是不正常的)冗长,这通常需要另一种外观,以确保没有逻辑错误被隐藏。如果我写了第一个代码片段并得到警告,我将感谢Eclipse,并愉快地改进代码,到达第二个代码片段。但同样,这只是因为我更喜欢第二个片段。
这里有一个场景,在这个场景中,这可能会起作用并影响功能(无意中)。假设代码最初如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 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; } |
后来,研究小组决定,如果给狗喂食,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // 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; } |
现在有一个bug,因为程序员做了最短的修改,"乍一看就知道"——如果这只可怜的狗行为不当,它就不会被喂饱。Eclipse的警告是把狗保存在这里,告诉程序员注意围绕
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // 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; } |