sad*_*tsu 0 java instanceof ternary-operator
我正在编写一个方法,其中所有参数都是doubles或ints.由于两个重载的内部代码都相同,我认为编写接口接受Numbers 会更容易.
我需要在此方法中做的一件事是验证其中一个参数大于零.为了实现这一点,我可以compare()将传递的值反对为零,我有以下静态字段:
private static final Double ZERO_D = Double.valueOf(0);
private static final Integer ZERO_I = Integer.valueOf(0);
Run Code Online (Sandbox Code Playgroud)
在相关方法中,我然后尝试执行此测试:
Number zero = ((stepSize instanceof Double) ? ZERO_D : ZERO_I);
Run Code Online (Sandbox Code Playgroud)
奇怪的是这个代码总是设置zero为ZERO_D.
我目前正在使用以下代码成功解决此问题:
Number zero;
if (stepSize instanceof Double) {
zero = ZERO_D;
} else {
zero = ZERO_I;
}
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么我得到这个奇怪的结果?如果可以的话,我更愿意在这里使用三元运算符.
发生这种情况是因为三元运算符总是求值为单一类型,在您的情况下,给定第二个和第三个参数的Java数字,最终类型应为Double,因此它将Integer转换为匹配.
您可以进行强制转换以使其返回Number:
Number zero = ((stepSize instanceof Double) ? (Number) ZERO_D : ZERO_I);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
729 次 |
| 最近记录: |