我想这样做:sum += castObjectToNumber(value)
和castObjectToNumber
应该看起来像这样:
private Number castObjectToNumber(Object value) {
if(value instanceof Integer) {
return (int)value;
} else if(value instanceof Float) {
return (float) value;
} else if(value instanceof Double) {
return (double) value;
} else if(value instanceof Long) {
return (long) value;
} else if(value instanceof Byte) {
return (byte) value;
} else if(value instanceof Short) {
return (short) value;
}
}
我无法改变,我得到了Object类型的值,我希望这是一个通用的解决方案。我的问题是,如果我返回一个Number对象,因为这是所有这些类型的唯一共同点,我不能使用+=
运算符。那我怎么用Java做这个呢?我认为我确实选择了错误的返回类型,因此它不起作用,但我不确定什么是正确的。
答案 0 :(得分:1)
你的sum变量有一个预定的类型,很可能是double,因为double是"最大的"那些类型。因此,您可以安全地将所有数字类型转换为double。此示例假定您的对象可以转换为Number。
Number number = (Number) obj;
sum += number.doubleValue();
答案 1 :(得分:0)
因为没有直接的方法来覆盖java中的算术运算符 - 建议你只需在你的数字'中添加2种方法。类: add(Number n),sub(Number n)执行你需要的算术运算