我已经阅读了java.lang.Number
的源代码,我想知道为什么
intValue()
longValue()
浮点值()
doubleValue()
是抽象的但是
短值()
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;
}
为什么 java 创始人要这样做?
我看不出这些方法有什么大的不同。它似乎相关。
附言
来自长类:
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;
}
来自整数类
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;
}
因此我们看到了很多相同的代码。我认为 copy paste
开发很糟糕,但我认为 Java 创始人有理由这样做。
最佳答案
根据documentation of the Number class ,方法byteValue
和shortValue
是在JDK1.1中最先添加的。这与第一个 JDK 版本中已经可用的其他“值”方法不同。
我的假设是,将这两个方法具体化是为了保持与 Number
的现有(也是非标准)子类的兼容性,否则它们会因在父类(super class)中添加新的抽象方法而被破坏.
关于java - 为什么 shortValue() 方法是具体的,而 intValue() 是抽象到 java.lang.Number 中的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22527959/