2017-05-27 67 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

相關問題