簡體   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