2012-10-12 25 views
0

我正在閱讀Hortsmann和Cornell(Vol.1)的書「Core Java」。 在「泛型」一章中,他們提出了一個故意輸入,以便查看編譯器所說的內容。我的問題是:不僅編譯器不會給我同樣的錯誤,而且當我按照本書所述更正輸入時,它也會一直給我提供錯誤。這裏的交易:Java泛型:「核心Java」教程的解決方案不適用於Eclipse?

public class PairTest1 { 
    public static void main(String[] args) { 
     double middle = ArrayAlg.getMiddle(3.14, 1729, 0); 
    } 
} 

class ArrayAlg { 
    public static <T> T getMiddle(T[] a) { 
     return a[a.length/2]; 
    } 
} 

書上說我應該得到的錯誤:

found: java.lang.Number&java.lang.Comparable>, required: double.

取而代之的是,Eclipse將不會讓我跑程序,並稱

The method getMiddle(T[]) in the type ArrayAlg is not applicable for the arguments (double, int, int)

這本書,然後說

the remedy is to write all parameters as double values.

我爲此e從1729改爲1729.1,從0改爲0.1。現在Eclipse中說:

The method getMiddle(T[]) in the type ArrayAlg is not applicable for the arguments (double, double, double)

Mmmhh ...我沒有得到什麼是怎麼回事。建議?

謝謝&問候

編輯:我試圖創建陣列double[] doubles = { 3.14, 1729.1, 0.1 };,並給它作爲參數,但現在我得到的錯誤​​

+2

本書使用的是哪個版本的JDK?你使用什麼版本?這本書是否使用Eclipse? –

回答

4

你應該改變你對

double middle = ArrayAlg.getMiddle(new Double[]{ 3.14, 1729.0, 0.0 }); 

呼叫如果你想通過他們你正在做的方式,那麼你應該使用的無功ARG語法聲明改爲

public static <T> T getMiddle(T... a) 
{ 
    return a[a.length/2]; 
} 

Java的。然後你可以調用方法爲

double middle = ArrayAlg.getMiddle(3.14, 1729.0, 0.0); 
+0

太棒了,它的作品! :)還有一個問題:我試圖改變我在編輯中所做的事情,使用「雙[]雙打」而不是「雙[]雙打」。像這樣,它工作。這是否意味着在基本類型上使用泛型時,我總是必須使用包裝器? – PLB

+0

你應該可以使用像getMiddle(3.14d,1729.0d,0.0d)這樣的調用; –

+1

是的,如果使用數組,則必須使用包裝,因爲基元類型的數組不會自動裝箱到相應包裝類的數組。 – Vikdor

4

函數需要一個數組,但你路過3單獨的雙參數。

+0

謝謝你,但它仍然不能解決它。檢查我的編輯。 – PLB

相關問題