2017-05-27 41 views
0

我想这样做: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中做到这一点?我想我确实选择了错误的返回类型,因此它不起作用,但我不确定什么是正确的。

+1

你能告诉我们为什么你要完成这个任务吗?自动装箱将完成你想要的大部分,但你可能需要施放。 + =运算符只能用于基元。 – stdunbar

+1

Autoboxing似乎没有检测到它是一个数字,而是一个双重数字,而不是一个复杂的对象。因此我认为我必须亲自去做这件事。 – CodeShark

回答

1

您的总和变量具有预定的类型,最有可能是双倍的,因为double是这些类型中的“最大”类型。因此,您可以安全地将所有数字类型转换为双倍。这个例子假设你的对象可以被转换为Number。

Number number = (Number) obj; 
sum += number.doubleValue(); 
+0

这看起来像是达到我想要的最佳方式。我应该更精确地检查Number类所提供的,并且认为double是最大类型,而不是使用最小类型。 – CodeShark

0

因为没有直接的方法来覆盖java中的算术运算符 - 建议您只需在您的'Number'类中添加2个方法: add(Number n),sub(Number n)来执行算术运算需要

+0

[编号](https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html)是Integer,Double等的派生类。 – 3141

相关问题