繁体   English   中英

Java泛型和可比性

[英]Java Generics and exetends Comparable

我需要构建一个具有通用字段的Course (我不能添加包含Comparator另一个字段)。

我需要对Course类进行Comparator ,以使其可以使用其自己的CompareTo方法比较通用字段(如果按字符串比较String-compareTo ,如果按Integer等等。):

方法getGeneric()返回泛型字段。

new Comparator<Course<?>>( {
    public int compare(Course<?> o1, Course<? extends Comparable<?>> o2) {
        return (o1.getGeneric()).compareTo(o2.getGeneric());
    }
});

您可能应该做的就是声明一个可比较的T并返回Comparator<Course<T>>

public static <T extends Comparable<T>> Comparator<Course<T>> comparator() {
    return new Comparator<Course<T>>() {
        @Override
        public int compare(Course<T> o1, Course<T> o2) {
            // I don't want to give away TOO much. :)
        }
    }
}

有一些方法可以执行而不必每次都创建新实例,但是它们需要绕过类型系统,因此它们更加先进。 上面对于大多数用例应该没问题。

您还可以使comparator函数本身带有Comparator<T>

public static <T> Comparator<Course<T>> comparator(Comparator<T> innerComparator) {
    ...
}

这为您提供了额外的灵活性,并且能够为没有自然比较(即未实现Comparable )的类型创建比较器。 例如,您可以创建一个Comparator<Course<Course<Integer>>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM