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

时间:2012-04-27 02:42:07

标签: java

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

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

在这里,我希望有一个名为incrementValue(Number n)的方法,它将n添加到value。我知道由于可能存在投射问题,您无法将两个Number对象添加到一起。但是,如果我使用检查来保证值并且n是相同的类型,是否可以将它们一起添加?或许还有更好的方法来解决这个问题。

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

这在Java中可行吗?我完全错了吗?

2 个答案:

答案 0 :(得分:5)

你可以convert all Numbers to a single typedouble损失最少):

class Attribute {

    private double value;

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

}

但IMO你最好只是重载构造函数;根据我的经验,Number实际上并不是一个非常有用的课程(I don't seem to be the only one who thinks so)。

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;
    }
}

答案 1 :(得分:0)

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

我当然可以编写一个不可能的Number子类,尽管它只是一个有点无意义的实现。