2013-05-09 98 views
0

即时尝试使用短路评估来简化检查的写作,但eclipse调用“局部变量继承可能尚未初始化”在if语句的最后一个语句中,我是正确使用评估方法? IDE可以理解评估声明吗?Eclipse和短路评估

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

看起来你的一个变量从未初始化过,但你仍然在使用它...... – 2013-05-09 14:42:22

+0

if语句的第二个语句没有初始化变量吗? – 2013-05-09 14:44:53

+1

是的,它可以理解。这不是IDE,而是Java语言规范。 – 2013-05-09 14:45:58

回答

7

你有你的括号错误,这是什么导致的错误。简化后,你的布尔表达式的结构是

(A && B) || C 

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

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