我想要一个像下面这样的构造函数。
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
子类,尽管这将是一个有点荒谬的实现。