类型不匹配:无法从比较器<capture#2-of?=“”super =“”t =“”>转换为比较器<! - ?超级T - >

时间:2016-11-06 13:44:02

标签: java generics

public class MergeSort<T> {
     private  Comparator<? super T> c;

      <T> void sort(T[] a, Comparator<? super T> c) {
            mergeSort(a, 0, a.length);
            this.c = c;
        }
}

this.c = c处的编译错误。错误是&#34;类型不匹配:无法从比较器转换为比较器&#34;

2 个答案:

答案 0 :(得分:1)

<T>方法上的sort影响MergeSort<T>中的T,因此它们不重合,它们是两个独立的类型,恰好都被称为{ {1}}。只需删除它就可以了:

 void sort(T[] a, Comparator<? super T> c) {

        this.c = c;
 }

答案 1 :(得分:0)

假设用户

GROUP BY

然后在MergeSort<Integer> sorter = new MergeSort<>(); String[] array = new String[] {"a", "b"}; Comparator<String> comparator = new Comparator<String> { ... }; sorter.<String> sort(array, comparator); 左侧有this.c = c类型,右侧是Comparator<Integer>。这显然没有意义,而且你的代码不应该编译。