Eclipse和短路评估

时间:2013-05-09 14:41:36

标签: java

我试图使用短路评估来简化检查的编写,但eclipse在if子句的最后一个语句中调用“局部变量继承可能尚未初始化”,我是否正确使用了评估方法? IDE能理解对语句的评估吗?

if ((className.startsWith("Svl")) &&
                ((inherit = aAST.findFirstToken(TokenTypes.EXTENDS_CLAUSE)) == null)
                || !(inherit.getText().equals("Servlet******"))) {
            log(aAST.getLineNo(), "error" + tokenIdent.getText());
        }

1 个答案:

答案 0 :(得分:7)

你的括号错了,这就是造成错误的原因。简化,布尔表达式的结构是

(A && B) || C

您在B中分配给inherit的位置。如果A失败,(A&& B)被短路为假,则不对B进行评估,并且需要对C进行评估以找出最终结果。显然,在评估C时,inherit可能尚未初始化。

根据您实际使用的内容,您可以交换A和B的位置。这将确保始终评估B.或者,你真正需要的可能是A&& (B || C)。要求取决于您。