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();

10-04 18:29