2013-07-07 48 views
0

我想寫一個通用的容器,我必須使用數組。我得到以下錯誤:使用泛型,數組和比較時出錯()

Exception in thread "main" java.lang.ClassCastException: 
[Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable; 

這裏是我的代碼的一部分:

class MinFo<T extends Comparable> { 

private final T[] array; 

MinFo(int size){ 
array = (T[]) new Object[size]; 

} 

T get(){ 

if(this instanceof Comparable){ 

int tmpPos = getNotNull(); 
T tmp = array[tmpPos]; 
int pos;  
for(pos = tmpPos ; pos < array.length; getNotNull()){ 

    if(tmp.compareTo(array[pos]) > 0) 
    tmp = array[pos]; 
} 

這使我刪除從類聲明「擴展可比」。現在我有一個不同的錯誤:

error: cannot find symbol 
    if(tmp.compareTo(array[pos]) > 0) 
     ^
symbol: method compareTo(T) 
location: variable tmp of type T 
where T is a type-variable: 
T extends Object declared in class MinFo 

在我看來,我不能贏。在此先感謝您的幫助。

+0

讓我們看看你的主錯誤發生的位置 – surfealokesea

+2

你確定你不是指'>',或者最壞的情況是'>'? – fge

+0

@fge你是對的,我有'>'。 – cete3

回答

0

對象實際上並沒有實現Comparable,所以聲明不起作用。

One answer這可能是相關的。 And another;我認爲他們比我能解釋得更好。

5

嗯,是的,這就是問題所在:

array = (T[]) new Object[size]; 

如果更改到:

array = (T[]) new Comparable[size]; 

那麼它應該沒問題。事情是,對T[]的演員只是(在執行時間)演員Comparable[]作爲T的上限是Comparable

+0

當我實現您的更改時,我得到'java.lang.RuntimeException:not comparable' – cete3