2016-11-06 5 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?を変換できません。スーパーT>コンパレータ<? super T>

+0

あなたのコードは意味がありません - どこmergeSortメソッドですか? –

+1

あなたのメソッドで 'void'文の前に' 'を取り除くとどうなりますか?それは冗長なようだ。 –

答えて

1

sort法上の<T>MergeSort<T>に1をシャドウイングされるので、それらが一致しない、彼らは両方のTように参照されるために起こる二つの独立したタイプです。ただそれを削除し、それは動作します:

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

     this.c = c; 
} 
0

は、ユーザーがComparator<Integer>を入力したthis.c = c左側に続いて

MergeSort<Integer> sorter = new MergeSort<>(); 
String[] array = new String[] {"a", "b"}; 
Comparator<String> comparator = new Comparator<String> { ... }; 

sorter.<String> sort(array, comparator); 

を行い、右辺はComparator<String>であると仮定します。これは明らかに意味をなさない、そして、あなたのコードはコンパイルすべきではありません。

関連する問題