我正在尝试开发一种通用的降序比较器。 它适用于String,但是它有来自eclipse的警告,例如"类型安全:来自Comparable< T>的未经检查的强制转换到T"使用compareTo方法在线上 有人会帮助我吗?
package ytp.collections;
import java.util.Comparator;
public class DescendingComparator<T> implements Comparator<Comparable<T>> {
@Override
public int compare(Comparable<T> o1, Comparable<T> o2) {
int ret = o1.compareTo((T) o2);
if (ret < 0) {
return 1;
}
if (ret > 0) {
return -1;
}
return 0;
}
}
答案 0 :(得分:0)
嗯,这是因为Comparable<T>
本身并不是T
。您可以创建许多实现Comparable<T>
但不扩展T
的不同类。
您需要做的是限制泛型参数:
public class DescendingComparator<T extends Comparable<T>> implements Comparator<T> {
@Override
public int compare(T o1, T o2) {
int ret = o1.compareTo(o2);
if (ret < 0) {
return 1;
}
if (ret > 0) {
return -1;
}
return 0;
}
}
另请注意,JDK中已存在反向比较器功能:Collections.html#reverseOrder(java.util.Comparator)。