【问题标题】:Type safety warning when making a generic descending Comparator制作通用降序比较器时键入安全警告
【发布时间】:2016-11-19 15:20:07
【问题描述】:

我正在尝试开发一个通用的降序比较器。 它与 String 一起工作得很好,但是它在使用 compareTo 方法的行上有来自 Eclipse 的警告,例如“类型安全:从 Comparable 到 T 的未经检查的强制转换”。
有人能帮帮我吗?

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

【问题讨论】:

    标签: generics


    【解决方案1】:

    嗯,这是因为Comparable&lt;T&gt; 本身并不一定是T。您可以创建许多不同的类来实现 Comparable&lt;T&gt; 但不扩展 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)

    【讨论】:

    • 谢谢!我发现了我的误解,您的代码运行良好。
    猜你喜欢
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2011-05-16
    • 2017-04-29
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多