2013-12-16 51 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