我正在为数字创建一个简单的包装类。简单地说,我希望它显示值42
经文42.0
;但是,它应该显示值1.6180338
作为该数字。够了。
private double number;
...
@Override
public String toString() {
return String.valueOf(
number == longValue()
? longValue()
: number );
}
...
@Override
public long longValue() {
return (long) number;
}
问题是42.0
的值始终显示为不 42
方法中的正确toString(...)
值
虽然String.valueOf(...)
方法有很多重载方法可以将正确的原始值显示为字符串,但是使用重载方法存在歧义。它可以使用String.valueOf(double)
或String.valueOf(long)
。这是因为三元运算符语句和结果类型。
我认为编译器能够识别long
类型并调用适当的String.valueOf(long)
方法。情况似乎并非如此;相反,JVM将在编译时选择最安全但最受限制的重载方法。在这种情况下,这是String.valueOf(double)
,因为它可以安全地将long
转换为double
。
我知道现在这在Java中是不可能的,但目前在其他语言中是否可以这样?是否有某种定义解释了这种方法,你能更详细地解释一下吗?
我指的是Covariance
或Contra-variance
这样的定义。注意:我意识到定义不是这两个中的一个:)