return super.isAvailable() && expander != null
&& rightNotLeft ? !expander.isExpandedRight() : expander.isExpandedRight();
我的问题是,当Expander为null时,我得到了null指针异常。但是我不认为会发生这种情况,因为expander!= null被评估为false,并且由于使用了AND,因此整个表达式应该短路并返回false。
return super.isAvailable() && expander != null
&& (rightNotLeft ? !expander.isExpandedRight() : expander.isExpandedRight());
上面的代码(加上括号)解决了该问题。但是,这对我来说没有任何意义,因为无论条件运算符中发生了什么,都没有办法返回true,所以它不应该短路吗?
谢谢你的回复。
最佳答案
这是由于operator precedence。您的条件没有明确的括号实际上是像
return (super.isAvailable() && expander != null
&& rightNotLeft) ? !expander.isExpandedRight() : expander.isExpandedRight();