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

为什么我不能在Java中的布尔表达式中声明临时变量?,java,java-7,Java,Java 7,我试图在不调用两个方法的情况下实现类似Guava的东西 我最初的电话是: return ((getElement(locator) != null) ? getElement(locator).getText() : StringUtils.EMPTY; 我试图将其缩短为: return ((Element element = getElement(locator)) != null) ? element.getText() : StringUtils.EMPTY; 但是我得到元素无法解析为

我试图在不调用两个方法的情况下实现类似Guava的东西

我最初的电话是:

return ((getElement(locator) != null) ? getElement(locator).getText() : StringUtils.EMPTY;
我试图将其缩短为:

return ((Element element = getElement(locator)) != null) ? element.getText() : StringUtils.EMPTY;
但是我得到
元素无法解析为变量
元素无法解析
,并且标记“Element”上出现语法错误,请删除此标记

这项工作:

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

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

您不能这样做,因为在解析条件语句后,
元素
已经超出范围。

您不能这样做,因为在解析条件语句后,
元素
已经超出范围。

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

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

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

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

如果你想知道它“出了什么问题”,问问詹姆斯·戈斯林。有些语言允许这种事情。Java没有。可能是因为它使事情更难阅读。@ajb这就是提出这个问题的原因;我确信我以前在C-家庭中做过这件事。如果你想知道“怎么了”,问问詹姆斯·戈斯林。有些语言允许这种事情。Java没有。可能是因为它使事情更难阅读。@ajb这就是提出这个问题的原因;我确信我以前在C族中做过这件事。所以这是一个用括号而不是括号定义范围的例子?所以这是一个用括号而不是括号定义范围的例子?