考虑两个重载:
public void add(Integer value)
{
add(value == null ? null : value.doubleValue());
}
Run Code Online (Sandbox Code Playgroud)
和
public void add(Double value)
{
// some code here
}
Run Code Online (Sandbox Code Playgroud)
如果我用a的null实例调用第一个Integer,那么三元条件是否会调用a的重载Double,或者它是否调用自身?
在我的机器上它调用Double重载,但这是定义良好的Java吗?JLS对此有何评价?
Jon*_*eet 21
是的,很明确它会调用Double过载.它无法调用Integer重载,因为没有隐式转换double(这是条件表达式的类型)Integer.
基本上,这有两个部分是无关紧要的:
所以如果你认为它是:
Double d = getSomeDoubleValueFromAnywhere();
add(d);
Run Code Online (Sandbox Code Playgroud)
...你期望被称为哪种方法?大概是add(Double)方法 - 这就是你所处的情况.
棘手的部分是计算出条件表达式的类型 - 是Double或者double?我相信规则(很难遵循,IMO)意味着它是Double由于使用了一个null文字(属于这种null类型).相反,你有:
Double dv = null;
add(value == null ? dv : value.doubleValue());
Run Code Online (Sandbox Code Playgroud)
......那么条件表达式类型会double,你会得到一个NullPointerException,如果value是以往null,因为它会试图拆箱的null价值.
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |