为什么我不能在Java中的布尔表达式中声明临时变量?

时间:2014-12-18 19:28:02

标签: java java-7

我试图实现类似Guava的nullToEmpty之类的东西,而不会对方法进行两次调用。

我原来的电话是:

return ((getElement(locator) != null) ? getElement(locator).getText() : StringUtils.EMPTY;

我试图缩短为:

return ((Element element = getElement(locator)) != null) ? element.getText() : StringUtils.EMPTY;

但我得到Element cannot be resolved to a variableelement cannot be resolvedSyntax error on token "element", delete this token

这有效:

Element element;
return ((element = getElement(locator)) != null) ? element.getText() : StringUtils.EMPTY;

在表达式中同时声明和分配有什么问题?

2 个答案:

答案 0 :(得分:3)

因为它不是一个块,你不能在括号中声明一个变量,除非它是一个for循环。此外,您的测试应该是!= null,或者调用getText()会抛出NullPointerException

Element element = getElement(locator);
return (element != null) ? element.getText() : StringUtils.EMPTY;

答案 1 :(得分:1)

您无法执行此操作,因为在您解决条件语句后element已超出范围。