2016-11-06 189 views
0
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。错误是“类型不匹配:不能从比较器转换为比较”类型不匹配:无法从比较器转换<capture#2-of? super T>到比较器<? super T>

+0

您的代码没有意义 - mergeSort方法在哪里? –

+1

如果您在方法中的'void'语句前摆脱了'',该怎么办?看起来多余。 –

回答

1

<T>sort方法遮蔽了一个在MergeSort<T>,所以他们不相吻合,他们碰巧既refered为T两个独立的类型。只要将其删除,它就会工作:

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

     this.c = c; 
} 
0

假设用户确实

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>和右手边是一个Comparator<String>。这显然没有意义,而且你的代码不应该编译。