Eclipse和短路评估

Luc*_*ira 0 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());
        }
Run Code Online (Sandbox Code Playgroud)

Mar*_*nik 7

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

(A && B) || C
Run Code Online (Sandbox Code Playgroud)

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

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