java - 为什么 shortValue() 方法是具体的,而 intValue() 是抽象到 java.lang.Number 中的?

标签 java oop

我已经阅读了java.lang.Number 的源代码,我想知道为什么

  1. intValue()
  2. longValue()
  3. 浮点值()
  4. doubleValue()

是抽象的但是

  1. 短值()
  2. 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 ,方法byteValueshortValue是在JDK1.1中最先添加的。这与第一个 JDK 版本中已经可用的其他“值”方法不同。 我的假设是,将这两个方法具体化是为了保持与 Number 的现有(也是非标准)子类的兼容性,否则它们会因在父类(super class)中添加新的抽象方法而被破坏.

关于java - 为什么 shortValue() 方法是具体的,而 intValue() 是抽象到 java.lang.Number 中的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22527959/

相关文章:

java - 再次使用 Eclipse Jetty 的 Maven 插件的 NoClassDef-s

java - 调用父类(super class)构造函数

Perl:动态模块加载、对象继承和 "common helper files"

python - 如何从一门类(class)切换到另一门类(class)?

multithreading - 观察者模式的替代方案

java - 在 Java 14 与 Java 17 中使用 instanceof

java - 如何使用 Spring Ldap 模板更新密码?

java - 为什么我的日志被删除?

java - 非法状态异常 : Cannot find changelog location: class path resource (liquibase)

c++ - 即使在显式调用析构函数后自动销毁对象