我想要一个像下面这样的构造函数。
public Attribute(String attrName, Number attrValue){
this.name = attrName;
this.value = attrValue;
}
在这里,我希望有一个名为incrementValue(Number n)的方法,它将n添加到value。我知道由于可能存在投射问题,您无法将两个Number对象添加到一起。但是,如果我使用检查来保证值并且n是相同的类型,是否可以将它们一起添加?或许还有更好的方法来解决这个问题。
现在我正在声明Integer和Double的实例变量,并将值分配给正确的类型。我想知道扩展它以允许Number的任何子类。显然,我可以为每个方法编写单独的方法,但这似乎是糟糕的编程。
这在Java中可行吗?我完全错了吗?
答案 0 :(得分:5)
你可以convert all Number
s to a single type(double
损失最少):
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
子类,尽管它只是一个有点无意义的实现。