0

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

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

1 回答 1

7

您的括号错误,这就是导致错误的原因。简化后,您的布尔表达式的结构是

(A && B) || C

您在 B 中分配给 的位置inherit。如果A失败,(A && B)短路为false,B不求值,需要对C求值才能得出最终结果。显然,inherit在评估 C 时可能尚未初始化。

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

于 2013-05-09T14:49:12.807 回答