Java:添加两个相同类型的值,其中两个值都是java.lang.Number的子类



我想要一个像下面这样的构造函数。

public Attribute(String attrName, Number attrValue){
    this.name = attrName;
    this.value = attrValue;
}

在这方面,我想要一个名为 incrementValue(数字 n) 的方法,它将向值添加 n。我知道由于铸造可能存在问题,您无法将两个 Number 对象添加在一起。但是,如果我使用支票来保证值和 n 是同一类型,是否可以将它们加在一起?或者也许有更好的方法来解决这个问题。

现在我正在声明整数和双精度的实例变量,并将值分配给正确的类型。我想扩展它以允许 Number 的任何子类。显然,我可以为每个方法编写单独的方法,但这似乎是糟糕的编程。

这在 Java 中可能吗?我这样做完全错了吗?

您可以将所有Number转换为单个类型(double损失最小):

class Attribute {
    private double value;
    public Attribute(String attrName, Number attrValue) {
        this.name = attrName;
        this.value = attrValue.doubleValue();
    }
}

但是 IMO 您最好只是重载构造函数; 根据我的经验,Number真的不是一个非常有用的课程(而且我似乎不是唯一一个这么认为的人)。

class Attribute {
    public Attribute(String attrName, int attrValue) {
        this.name = attrName;
        this.value = attrValue;
    }
    public Attribute(String attrName, double attrValue) {
        this.name = attrName;
        this.value = attrValue;
    }
}

不,这在 Java 中是不可能的。 你能做的最好的事情就是经历你所知道的所有Number案例。

我当然可以写一个不可能的Number子类,尽管这将是一个有点荒谬的实现。

最新更新