我已经阅读了源代码,java.lang.Number我想知道为什么
intValue() longValue() floatValue() doubleValue()是抽象的但是
shortValue() byteValue()具体的.
源代码:
public abstract class Number implements java.io.Serializable {
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
public byte byteValue() {
return (byte)intValue();
}
public short shortValue() {
return (short)intValue();
}
private static final long serialVersionUID = -8742448824652078965L;
}
Run Code Online (Sandbox Code Playgroud)
为什么java创始人已经成功了?
我没有看到这些方法之间存在很大差异.它似乎是相关的.
PS
来自Long class:
public byte byteValue() {
return (byte)value;
}
public short shortValue() {
return (short)value;
}
public int intValue() {
return (int)value;
}
public long longValue() {
return (long)value;
}
public float floatValue() {
return (float)value;
}
public double doubleValue() {
return (double)value;
}
Run Code Online (Sandbox Code Playgroud)
来自Integer类
public byte byteValue() {
return (byte)value;
}
public short shortValue() {
return (short)value;
}
public int intValue() {
return value;
}
public long longValue() {
return (long)value;
}
public float floatValue() {
return (float)value;
}
public double doubleValue() {
return (double)value;
}
Run Code Online (Sandbox Code Playgroud)
因此我们看到了很多相同的代码.我认为copy paste开发很糟糕,但我认为Java创始人有理由这样做.
根据Number类的文档,在JDK1.1中首先添加了byteValue和方法。shortValue这与第一个 JDK 版本中已经可用的其他“Value”方法不同。我的假设是,这两种方法被具体化,是为了保持与现有(也是非标准)子类的兼容性Number,否则这些子类会因在超类中添加新的抽象方法而被破坏。