我有一个名为Interval
的通用类>
package com.test; //import statements public class Interval<T extends Comparable<? super T>> { private boolean isStartInclusive; private T start; private T end; private boolean isEndInclusive; //Constructors //Getter and Setters //ToString //Hashcode and Equals //A public static method that returns comparator for use by other classes public static <T extends Comparable<? super T>> Comparator<Interval<T>> getIntervalComparator() { return (o1, o2) -> { //comparing logic that returns -1 or 1 or 0 }; } }
[每当我使用此
Comparator
对List<Interval<T>>
进行排序时,它都起作用。
List<Interval<T>> intervalsList1 = getIntervalsList(); intervalsList1.sort(Interval.getIntervalComparator());
但是当我这样做时>
List<Interval<T>> intervalsList1 = getIntervalsList1(); List<Interval<T>> intervalsList2 = getIntervalsList2(); Interval<T> interval1 = intervalsList1.get(i); Interval<T> interval2 = intervalsList2.get(i); int compareOneVsTwo = Interval.getIntervalComparator().compare(interval1, interval2); //line 85
我说错了
Error:(85, 76) java: incompatible types: com.test.Interval<T> cannot be converted to com.test.Interval<T>
即使我这样做
Interval<Integer> integerInterval1 = new Interval<>(true, 1, 2, true); Interval<Integer> integerInterval2 = new Interval<>(true, 4, 5, true); int compareOneVsTwo = Interval.getIntervalComparator().compare(integerInterval1, integerInterval2); //line 115
我收到此错误:
Error:(115, 72) java: incompatible types: com.test.Interval<java.lang.Integer> cannot be converted to com.test.Interval<T>
我不明白是什么原因导致了此编译错误。
Interval
类内部的比较器不是自然排序顺序,而是多个类出于自身目的进行排序时使用的顺序。
我有一个称为Interval package com.test的通用类; //导入语句公共类Interval
如果将语句分为两个独立的语句,它将起作用:
Comparator<Interval<T>> compareOneVsTwo = Interval.getIntervalComparator();
compareOneVsTwo.compare(interval1, interval2);
// or in the integer case:
Comparator<Interval<Integer>> compareOneVsTwo = Interval.getIntervalComparator();
compareOneVsTwo.compare(interval1, interval2);