如何在调用其方法时为泛型指定“类型”

时间:2011-10-07 17:38:23

标签: java

我遇到的问题是javac认为T没有实现compareTo()。那么我怎么能这样做,同时仍然保持“通用”。不会转换为特定类型会破坏使用泛型类型的目的吗?

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
        }
    }
}

3 个答案:

答案 0 :(得分:4)

您需要将泛型类型参数细化为Tree<T extends Comparable<T>> - 否则编译器不知道您的T对象已为其定义了compareTo(T t)方法。

答案 1 :(得分:0)

通用compareTo的签名应该是(T arg0),而不是普通的Object。

答案 2 :(得分:0)

使用接口进行值

e.g。

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;
  }


}