制作通用降序比较器时键入安全警告

时间:2016-11-19 15:20:08

标签: generics

我正在尝试开发一种通用的降序比较器。 它适用于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;
    }
}

1 个答案:

答案 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)