2016-11-06 188 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>。這顯然沒有意義,而且你的代碼不應該編譯。