5

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

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

在此,我想要一个名为 incrementValue(Number n) 的方法,它将 n 添加到值中。我知道您不能将两个 Number 对象加在一起,因为可能存在转换问题。但是,如果我使用检查来保证 value 和 n 是相同的类型,是否可以将它们加在一起?或者也许有更好的方法来解决这个问题。

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

这在java中可能吗?我会完全错了吗?

4

2 回答 2

5

您可以将所有Numbers 转换为单一类型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;
    }
}
于 2012-04-27T02:49:42.317 回答
0

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

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

于 2012-04-27T02:47:00.003 回答