对于我的生活,我不明白为什么Eclipse将下面的else if
条款标记为"死代码":
BaType rbName = rSoapXml.getName().getBName();
BaType cbName = cSoapXml.getName().getBName();
IaType riName = rSoapXml.getName().getIName();
IaType ciName = cSoapXml.getName().getIName();
String rbNameF = rbName.getF() == null ? "null" : rbName.getF();
String cbNameF = (cbName == null || cbName.getF() == null) ? "null" : cbName.getF();
LOG.info("\n***BEFORE***: " + rbNameF + ", COM: " + cbNameF);
if (cbName != null) {
if (riName != null) {
String errMsg = "Expected an I message but received a B instead.";
throw new RuntimeException(errMsg);
}
if (cbName.getBorE() != null)
rbName.setBorE(cbName.getBorE());
if (rbName.getBorE() == null && cbName.getBorE() == null) {
String errMsg = "Missing B name!";
throw new RuntimeException(errMsg);
}
}
else if (ciName != null) { // dead
if (rbName != null) { // dead
String errMsg = "Expected a B message but received an I instead."; // dead
throw new RuntimeException(errMsg); // dead
} // dead
if (ciName.getIName() != null) // dead
riName.setIName(ciName.getIName()); // dead
if (riName.getIName() == null && ciName.getIName() == null) { // dead
String errMsg = "Missing I name"; // dead
throw new RuntimeException(errMsg); // dead
}
}
我考虑的要点:
else
应该有效。我在这里缺少什么?
答案 0 :(得分:3)
编译器错误,这应该被认为是Eclipse编译器错误。通常情况下,编译器会断定您之前是解除引用变量,这样可以确保在代码中稍后变量为非null。它可能会被这条线弄糊涂:
String cbNameF = (cbName == null || cbName.getF() == null) ? "null" : cbName.getF();
您似乎在这里取消引用cbName
,但实际上只有在不 null时才会尊重它。在您检查变量时,该变量可能合法地为null
,而else
分支并未死亡。
如果您正在使用Eclipse进行编译,那么请与参考编译器(javac
)进行交叉检查。