Java 在条件不满足时计算条件语句的三元运算符
我写了一些代码;以下是相关片段:Java 在条件不满足时计算条件语句的三元运算符,java,nullpointerexception,ternary-operator,Java,Nullpointerexception,Ternary Operator,我写了一些代码;以下是相关片段: @NonNullByDefault public class Score<NUMERAL, LITERAL> { protected NUMERAL value; @Nullable protected LITERAL literal; [...] 基本上,想法是分数可能只有一个数值,在这种情况下文字为空。我已经编写了一些单元测试,并得到一个空指针异常,代码如下: [....] Score<Float, Str
@NonNullByDefault
public class Score<NUMERAL, LITERAL>
{
protected NUMERAL value;
@Nullable
protected LITERAL literal;
[...]
基本上,想法是分数
可能只有一个数值,在这种情况下文字
为空。我已经编写了一些单元测试,并得到一个空指针异常,代码如下:
[....]
Score<Float, String> score = new Score<>(0.0f);
Score<Float, String> anotherScore = new Score<>(1.0f, "One");
[....]
assertFalse(score.equals(anotherScore));
[…]
分数=新分数(0.0f);
另一个分数=新分数(1.0f,“一”);
[....]
assertFalse(分数等于(另一个分数));
如果我没有弄错的话,equals
中的快捷方式不应该阻止执行&
之后的任何内容,因为第一个表达式已经是false
?此外,为何会有例外?由于条件为true,我希望计算三元表达式并跳过条件表达式。从我在规范中所读到的内容来看,这应该是一种行为。此外,我发现了一个问题:哪一个应该给我的思维过程提供更多的杠杆作用
也许我忽略了一些很明显的事情,但我已经没有想法了。也许你能帮忙?它可以短路,但不是你想要的方式<代码>&&比三元
?:
具有更高的优先级-因此(添加缩进、换行和注释以澄清)
@durron597,OP似乎是一个编码员,他自己肯定能弄明白,但我想这不会有什么坏处。我同意,但未来的读者可能会有这个问题,但可能没有那么聪明:)。不管怎样,在评论之前,我先做了准备;谢谢你的编辑。非常感谢,我将在周一第一件事测试它。真不敢相信我犯了这么明显的错误!至少我又学到了宝贵的一课!;)@埃里克托比亚斯,没问题。我也必须检查这个答案的优先顺序!干得真漂亮,干杯!
[....]
Score<Float, String> score = new Score<>(0.0f);
Score<Float, String> anotherScore = new Score<>(1.0f, "One");
[....]
assertFalse(score.equals(anotherScore));
((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())
((Score<NUMERAL, LITERAL>) object).getValue().equals(value) &&
(literal == null
? ((Score<NUMERAL, LITERAL>) object).getLiteral() == null
: literal.equals(((Score<NUMERAL, LITERAL>) object).getLiteral()))