2011-12-10 65 views
1

可能重複:
Why don't Generics support primitive types?通用功能,長

我想爲INT,短期和長期的一個功能。我有三個幾乎相同的功能。

private <T extends Number > T scanTInteger() throws IOException, NumberFormatException 
{ 
    T number = 0; 

但我不知道如何做泛型,如int,short,long。對於對象來說很簡單。 是否有方法。 編輯 好吧,我知道如何做到這一點,沒有泛型函數。我將只使用原始類型的長和最大尺寸,並在最後將其轉換。如果有人發現如何與普通的做,我會很高興:)

+2

沒有辦法。 http://stackoverflow.com/questions/2721546/why-dont-generics-support-primitive-types – RiaD

+1

你想做什麼? int,short和long都有包裝類:Integer,Short,Long。 –

+0

我知道什麼是包裝。這就是爲什麼我將Number類擴展爲泛型,但Number不能幫助我。 –

回答

3

你可以創建自己的類裏面包裹這三種類型中的任何一個,然後將該類的代碼中處理它們。你不會有任何語言特定的自動化處理,自動裝箱等,但是這會給你看起來要求的東西。

然而,在我看來,製作一個功能的主要原因是爲了寫一些片的邏輯一次,而不是三個。我建議看看每種數據類型都有不同的方法,然後讓這三種方法分別調用一種包含你的邏輯的方法。它可以是(應該是)私有的,因此隱藏你所做的任何處理(在你的中心邏輯之前和/或之後)以適應所有三種類型,從任何角度調用它們都會很容易,因爲基元不必是插入到包裝中,並且有3個單行方法而不是一個通用方法對於維護者或用戶來說都不是很麻煩。

換句話說,就是使用泛型真的值得你的情況嗎?他們真的是用於類,而不是原語。

+0

我用了一個長函數和一個三行函數atm。我說,在編輯,但感謝您的建議:) –