2017-12-07 10 views
0

私は、次の2つの引数をとるメソッドを書いています。1. Numberを拡張する任意の型の配列リスト。2.同じ型の番号。このメソッドは、2番目の引数より小さいすべての数値の配列リストを返す必要があります。問題を理解する比較キャスト

私のクラスはQuiz3FinalQuestion<T extends Comparable>>

私法と呼ばれている私は、私がobjをキャストするために私に言ったJava事前コンパイラを持っていなかった場合、それが期待通りに動作しますが、このよう

public static <T extends Number> ArrayList<T> lessThan(ArrayList<T> lst, T number) { 
     ArrayList<T> arLst = new ArrayList<>(); 
     for (T obj: lst) { 
      if (((Comparable<T>) obj).compareTo(number) < 0) 
       arLst.add(obj); 
     } 
     return arLst; 
} 

をルックスを書きましたComparableと入力すると、これは実行されませんでした。私は、数値パラメータがcompareToのComparableバージョンでキャストされると仮定しています。したがって、オブジェクトをarLstに追加すると、オブジェクトはT型にキャストされます。 また、未知の型Tのラッパークラスオブジェクトを比較する簡単な方法はありますか?

+0

私は何か不足している可能性がありますが、このコードについてはJava 8固有のものがありますか? –

答えて

4

あなたはTComparable<? super T>を拡張することを強制することができます:

public static <T extends Number & Comparable<? super T>> 
ArrayList<T> lessThan(ArrayList<T> lst, T number) { 
    ... 
} 

その後、あなたはキャストを削除することができます。


1.例えば参照してください。 Explanation of generic <T extends Comparable<? super T>> in collection.sort/ comparable code?なぜ我々はComparable<T>を使用しないのですか?

+0

以上である必要があります。これは 'Comparable ' – newacct

+0

@newacctです。 –