2011-10-07 64 views
0

我遇到的問題是javac認爲T不執行compareTo()。那麼,我怎麼能做到這一點,而仍然保持「通用」。沒有鑄造成特定類型,打敗了使用泛型的目的?如何在調用方法時爲泛型指定「type」

public class Tree<T> implements Comparable<T> { 

    private T value; 


    public T getValue() { 
     return value; 
    } 

    @Override 
    public int compareTo(T arg0) { 
     // TODO Auto-generated method stub 
     if (this.getValue() != null) { 
      return this.getValue().compareTo(arg0);  // compilation problem 
     } 
    } 
} 

回答

4

您需要的泛型類型參數細化到Tree<T extends Comparable<T>> - 否則編譯器不知道你T對象具有爲它定義一個compareTo(T t)方法。

0

通用compareTo的簽名應該是(T arg0),而不是普通的Objct。

+0

當然,這只是一個快速示例來顯示我的問題。 – Saideira

+0

@Saideira這是一個快速的答案,因爲在編輯它之前,你的班級沒有實現可比較的。 –

+0

我明白你的意思了。謝謝。 – Saideira

0

使用界面的值

例如,

public class Tree<T> implements Comparable<T> { 



private Comparable<T> value; 


    @Override 
    public int compareTo(T o) { 
    // TODO Auto-generated method stub 
     if (value != null) { 
      return value.compareTo(o); 
     } 
     return 0; 
    } 


}