我的java泛型出现编译时错误,我不明白。
我有两种方法:
public static final <T> T doStuff(List<T> list, int k, Comparator<T> comparator) {
T element = null;
//some stuff done
return element;
}
public static final <T extends Comparable> T doStuff(List<T> list, int k) {
Comparator<T> comparator = new Comparator<T>() {
public int compare (T o1, T o2) {
return o1.compareTo(o2);
}
};
return doStuff(list, k, comparator);
}
如果找不到方法doStuff(java.util.List,int,java.util.Comparator),则会失败。 当我将第二种方法更改为:
public static final <T> T doStuff(List<T> list, int k) {
Comparator<T> comparator = new Comparator<T>() {
public int compare (T o1, T o2) {
return ((Comparable)o1).compareTo(o2);
}
};
return doStuff(list, k, comparator);
}
工作正常。
有人可以对此有所了解。
答案 0 :(得分:2)
您的通用参数受原始类型Comparable
的限制, 与其自身相比(即T
)。
而是将类型从<T extends Comparable>
更改为<T extends Comparable<T>>
。
以下代码编译:
public static final <T> T doStuff(List<T> list, int k,
Comparator<T> comparator) {
T element = null;
// some stuff done
return element;
}
public static final <T extends Comparable<T>> T doStuff(List<T> list, int k) {
Comparator<T> comparator = new Comparator<T>() {
public int compare(T o1, T o2) {
return o1.compareTo(o2);
}
};
return doStuff(list, k, comparator);
}
答案 1 :(得分:1)
可比较本身就是通用的。如果您改为
会发生什么public static final <T extends Comparable<? super T>> T doStuff(List<T> list, int k) ...