java-三元运算符在不满足条件的情况下评估条件语句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-三元运算符在不满足条件的情况下评估条件语句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2155字,纯文字阅读大概需要4分钟。
内容图文
我已经写了一些代码;以下是相关片段:
@NonNullByDefault
public class Score<NUMERAL, LITERAL>
{
protected NUMERAL value;
@Nullable
protected LITERAL literal;
[...]
我已经如下覆盖了equals()方法:
@Override
public boolean equals(@Nullable Object object)
{
if(object == null) return false;
if(object == this) return true;
if( object instanceof Score)
{
return ((Score<NUMERAL, LITERAL>) object).getValue().equals(value) &&
literal == null ? ((Score<NUMERAL, LITERAL>) object).getLiteral() == null : literal.equals(((Score<NUMERAL, LITERAL>) object).getLiteral());
}
return false;
}
基本上,想法是分数可能仅具有数字值,在这种情况下文字为null.我已经编写了一些单元测试,并使用以下代码获取了空指针异常:
[....]
Score<Float, String> score = new Score<>(0.0f);
Score<Float, String> anotherScore = new Score<>(1.0f, "One");
[....]
assertFalse(score.equals(anotherScore));
如果我没记错的话,在&&之后,不应简捷地等于从被执行为第一个表达式已经是假的?此外,为什么例外?由于条件为真,因此我希望对三元表达式进行求值,并跳过条件表达式.根据我在规范中阅读的内容,这应该是行为.此外,我发现了一个问题:Java ternary (immediate if) evaluation,应该为我的思考过程提供更多的杠杆作用.
也许我忽略了一些显而易见的事情,但是我没有主意.也许你可以帮忙吗?
解决方法:
它会短路,但是与您想要的方式完全不同. &&优先级高于三元?:-因此(缩进,换行和添加注释以澄清)
((Score<NUMERAL, LITERAL>) object).getValue().equals(value) &&
literal == null
? ((Score<NUMERAL, LITERAL>) object).getLiteral() == null
: literal.equals(((Score<NUMERAL, LITERAL>) object).getLiteral())
实际上意味着:
//the first line as a whole is the condition for ?:
((Score<NUMERAL, LITERAL>) object).getValue().equals(value) && literal == null
? ((Score<NUMERAL, LITERAL>) object).getLiteral() == null
: literal.equals(((Score<NUMERAL, LITERAL>) object).getLiteral())
实际上,这意味着,如果条件的第一部分为false但文字为null,则您将自动输入表达式的:部分,在其中调用literal.equals,从而导致NullPointerException.
修复很简单:添加括号以告诉Java您希望对事物进行哪种评估:
((Score<NUMERAL, LITERAL>) object).getValue().equals(value) &&
(literal == null
? ((Score<NUMERAL, LITERAL>) object).getLiteral() == null
: literal.equals(((Score<NUMERAL, LITERAL>) object).getLiteral()))
内容总结
以上是互联网集市为您收集整理的java-三元运算符在不满足条件的情况下评估条件语句全部内容,希望文章能够帮你解决java-三元运算符在不满足条件的情况下评估条件语句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。