2013-12-16 75 views
0

我需要建立一個類Course它有一個通用字段(我不能添加另一個字段包含Comparator)。Java泛型和exetends可比較

我需要一個Comparator到類Course使用它自己的CompareTo方法,使其能夠比較通用的領域(如String-compareTo的字符串,如果整型等):

的評判getGeneric()回報通用領域。

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

請顯示您當前的課程類。 – rgettman

回答

5

什麼你應該做的是有一個聲明可比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>>>

+1

爲獲得最佳效果,請使用'> – newacct