我收到了这段代码:
if (conditionX) {
doX();
}
else if (conditionY) {
boolean isSomethingTrue = findOutIfSomethingIsTrue();
if (anotherConditionIsTrue) {
doY();
}
}
XYZPojo xyzPOJO = getXYZPOJO();
else if (xyzPOJO.getValueX().contains("xyz")) { // <- eclipse wants me to delete this 'else' statement
doXYZ();
}
当我运行此代码时,eclipse会抱怨"Syntax error on token "else", delete this token"
。我理解这是因为我有代码:
boolean conditionXYZ = checkIfXYZIsTrue();
两个else if
语句之间的。但我无法检查conditionXYZ
的值,除非我在两个conditionXYZ
语句之间设置else if
的值。
我在SO上找到的唯一其他类似问题是this one,它建议使用两个if语句。问题是如果conditionXYZ
为真,我不希望评估conditionY
。
我的另一个选择是使用两个if statements
并为每个if语句添加一个return语句。但我发现这个解决方案在代码设计方面并不优雅。
在执行任何if语句之前,我的第三个选项是checkIfXYZIsTrue()
,但这效率不高,因为如果conditionY
为真,我们不需要检查conditionXYZ
。
有什么想法吗?
提前致谢
答案 0 :(得分:2)
Java语法不允许您在if / else链之间使用语句(不在各自的块中)。
您可以在else if
条件下执行第三个条件:
if (conditionX) {
doX();
} else if (conditionY) {
boolean isSomethingTrue = findOutIfSomethingIsTrue();
if (anotherConditionIsTrue) {
doY();
}
} else {
XYZPojo xyzPOJO = getXYZPOJO();
if (xyzPOJO.getValueX().contains("xyz")) {
doXYZ();
}
//reuse xyzPOJO
}
或者,最后的else
仍然可以是:
} else if (getXYZPOJO().getValueX().contains("xyz")){
doXYZ();
}
答案 1 :(得分:0)
我知道这已经很老了,但看到没有人给出我想要的答案,我想我会发布我的答案,以防其他人在这里寻找选项。
<块引用>问题是我不希望在 conditionY 为真时对 conditionXYZ 进行评估。
在评估 if/else 语句上方的 conditionXYZ 之前,您可以使用三元运算符来检查 conditionY 是否为假。
//Sets xyzPOJO to getXYZPOJO() if conditionY isn't true, otherwise set xyzPOJO to null
XYZPojo xyzPOJO = conditionY!=true ? getXYZPOJO() : null;
if (conditionX) {
doX();
}
else if (conditionY) {
boolean isSomethingTrue = findOutIfSomethingIsTrue();
if (anotherConditionIsTrue) {
doY();
}
}
else if (xyzPOJO.getValueX().contains("xyz")) {
doXYZ();
}