2012-03-24 10 views
1

以下のメソッドでは、未処理の型の使用に関する警告は表示しないようにしたいが、私が望むようにするための構文を理解することはできない。ここでは、現在の方法は次のとおりです。リスト内の一般的な比較対象の問題

static long countSplitInversions(List<? extends Comparable> list) { 
    long inversions = 0; 

    final int leftLimit = list.size()/2; 
    int left = 0; 
    int right = leftLimit; 

    for (int i = 0; i < list.size(); i++) { 
     if (left == leftLimit || right == list.size()) { 
      break; 
     } 
     if (list.get(left).compareTo(list.get(right)) <= 0) { 
      left++; 
     } else { 
      right++; 
      inversions += leftLimit - left; 
     } 
    } 

    return inversions; 
} 

私は警告を回避するために、署名を変更する場合:

static <T> long countSplitInversions(List<? extends Comparable<? super T>> list) 

、その後のcompareToがある行がエラーでコンパイルされません。

Method compareTo in interface java.lang.Comparable<T> cannot be applied to given tyes 
required: capture #1 of ? super T 
found: java.lang.Comparable<? super T> 

答えて

4

メソッドシグニチャを次のように変更することを検討してください。

static <T extends Comparable<? super T>> long countSplitInversions(List<T> list) { 
+1

バー、私はそれが単純だったとは思わない、私は再び一般的なドキュメントを再読する必要があります。助けてくれてありがとう! – Hiro2k

+0

@ Hiro2k:ようこそ!運が良かった。最良の結果を得るために –

+2

を使用してください。 '>' – newacct

1

警告またはコンパイラエラーを意味しますか?

現在のコードではすでに警告が表示されていますが、最後に示唆するようにコンパイラエラーが発生した場合は、Comparableバインドの型引数を指定する必要があります。

これと少し似ていますが、お勧めのようにコンパイラエラーが発生します。

しかし、それはあなたの匹敵するオブジェクトでは何もできません。

他の答えが示唆するように、あなたのメソッドの型パラメータが必要な場合があります。

関連する問題