2011-05-16 13 views
3

我們有兩個進程類,除了一個用於處理float []數據和另一個用於int []數據外,它們幾乎相同。我可以使用泛型float []和int []嗎?

我在想他們合併成一個。我最初的想法是使用泛型float []和int []。

Java通用對我而言是新的。所以我寫了下面的測試方法來看看泛型是如何工作的,但是我不能讓它爲我工作。

public <T> T caculate(T[] values) 
    { 
     T result; 
     for(int i = 0; i < values.length; i++) 
     { 
      result = result + values[i]; 
     } 

     result = result/(values.length); 
     return result;  
    } 

有人可以修改上面的方法嗎? float和int是Java中的基本類型。上面的方法可能不正確。

回答

3

我們有兩個過程類,幾乎相同,除了一個用於處理float[]數據,另一個用於int[]數據。

不幸的是,你不能用泛型來做到這一點。你最好的選擇是硬着頭皮,分開編寫兩個類。即沒有泛型。

理論上,您可以嘗試將陣列更改爲Integer[]Float[]並將<T>更改爲<T extends Number>。但是:

  • 這可能涉及更改代碼的其他部分。

  • 它有可能使您的處理代碼變慢。

  • 使用T extends Number以通用方式表達處理算法可能很困難。首先,Number接口不支持算術。


我想這也有可能通過包裝在一些類,使它們看起來像(說)整數數組的基本數組來解決這個問題。但是這很容易給你帶來截斷,精度等問題......取決於你正在實施的算法。所以這隻適用於有限的情況。

1

由於您試圖將+運算符應用於T類型的對象,因此您的方法不起作用。但是,不能保證T將支持該操作,因此編譯器不會讓您這樣做。不幸的是,你可以放在通用類型上來解決這個問題。

如果你想用一種方法處理int []和float [],只需用float來處理所有內容並根據需要投射整數。

相關問題