2011-02-09 31 views
0

我只是無法弄清楚,也許你可以幫助我。Java:使用一種方法在數組參數中的不同類型

問題:


public class class1 implements Comparable<class1> { 
    public int compareTo(class1 o) { 
     //some code 
    } 
} 

public class class2 implements Comparable<class2> { 
    public int compareTo(class2 o) { 
     //some code 
    } 
} 

public class foo { 
    private ArrayList<Class1> abc = new ArrayList<Class1>();  
    private ArrayList<Class2> def = new ArrayList<Class2>(); 
} 

在下面o = abc or def

public int foo1 (ArrayList<Object> o) { 
    o[0].compareTo(o[1]); 
} 

此代碼保持讓我這個錯誤:

The method compareTo(class1) is undefined for the type Object 

我不明白爲什麼,但我可以找不到orkarround,以便我不必重複代碼,這將是必要的,因爲我有更多的ArrayList對象和更長的代碼。

我希望你們其中一個有想法。

問題已解決!解決方法是:

public <T extends Comparable<T>> int foo1 (ArrayList<T> o) { 
    return o.get(0).compareTo(o.get(1)); 
} 

由Peter Lawrey

+0

如果您的問題被回答,你應該標記正確的答案爲「接受」(應該有一個「接受」按鈕,或者這樣靠近它),那麼它會得到一個綠色的√圖標,彼得獲得15個聲望點。 – 2011-02-09 18:48:58

回答

0

implements Comparable<class1>

要實現,所以你需要爲接口的所有方法提供實現,否則使抽象

實現它像

public class class1 implements Comparable<class1> { 

    public int compareTo(class1 o) { 
     //some code 
    } 
} 

public class class2 implements Comparable<class2> { 

    public int compareTo(class2 o) { 
     //some code 
    } 
} 
+0

對不起,我的不好,現在它的更正 – FGG 2011-02-09 16:07:54

+0

更新............. – 2011-02-09 16:13:18

0

當你使用一個對象通過它的超類的方法,你不能假設它的子類的方法可用。

+0

嗯,是的,我也想到了。任何idear workarround問題? – FGG 2011-02-09 16:09:46

0

請嘗試以下編譯和工作爲abcdef沒有警告。

public <T extends Comparable<T>> int foo1 (ArrayList<T> o) { 
    return o.get(0).compareTo(o.get(1)); 
} 
+0

Tryed可以工作,但它仍然表明我使用原始類型,但我不確定這是否正常。 – FGG 2011-02-09 16:08:54

0

你需要使該方法一般:

public <T extends Comparable<? super T>> int foo1 (ArrayList<T> o) { 
相關問題