我正在尝试多态地使用 java.lang.Number:我有一个列表,其中放置了多个 Double、Integer 等实例,然后我想对它们进行多态算术运算(例如,每个数字加倍)。
我们没有 java.lang.Number 的自动装箱能力,而且我没有找到更好的方法来做到这一点,而不是示例源代码中的 - 不是那么多态 - 方法 multiply(Number n, int factor)接下来......通过这个实现,我们需要一个用于每个算术运算(加法,减法等)的方法
编辑 - 增强问题:如果我们从抽象的角度考虑 java.lang.Number,我们会认为任何数字都可以是算术运算的一部分,但它似乎并不存在一种简单的加/减/将 / 等 x 乘以数字列表,与它们的类型无关(整数、双精度、短 ...)
有更好的想法吗?提前致谢 ;)
示例源代码:
public class NumberTest {
private List<Number> list = new ArrayList<Number>();
public static void main(String args[]) {
new NumberTest().start();
}
protected void start() {
this.fillList();
Number num;
for (int i = 0; i < list.size(); i++) {
num = this.multiply(list.get(i), 2);
list.set(i, num);
}
System.out.println(this.toString());
}
private void fillList() {
list.add(new Byte((byte) 12));
list.add(new Short((short) 20));
list.add(new Integer(30));
list.add(new Long(40));
list.add(new Float(50.123));
list.add(new Double(60.123));
}
private Number multiply(Number n, int factor) {
if (n instanceof Byte) {
n = n.byteValue() * factor;
} else if (n instanceof Short) {
n = n.shortValue() * factor;
} else if (n instanceof Integer) {
n = n.intValue() * factor;
} else if (n instanceof Long) {
n = n.longValue() * factor;
} else if (n instanceof Float) {
n = n.floatValue() * factor;
} else if (n instanceof Double) {
n = n.doubleValue() * factor;
}
return n;
}
@Override
public String toString() {
String result = "";
for (Number num : list) {
result += num+"\n";
}
return result;
}