我遇到的问题是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
}
}
}
答案 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;
}
}