Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在条件不满足时计算条件语句的三元运算符_Java_Nullpointerexception_Ternary Operator - Fatal编程技术网

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