0
import java.util.*;
class pqr
{
public static void main(String ab[])
{
List<Integer> ts=new ArrayList<Integer>();
for(int i=0;i<10;i++)
ts.add((int)(Math.random()*1000));
System.out.println(ts);

class RSO implements Comparator<Integer>
{
public int compare(Integer i,Integer j)
{
return j-i;
}
}
RSO rs=new RSO();
Collections.sort(ts,rs);
System.out.println(ts);

Comparator fs=(Comparator<Integer>)Collections.reverseOrder(rs); // Same result with casting or without casting
Collections.sort(ts,fs);
System.out.println(ts);
}
}

このコードは期待どおりの結果を示していますが、コンパイル中に末尾から 5 行目に次の警告メッセージが表示されます。

Note: 5.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

キャストの有無にかかわらず同じ警告が表示されます。警告を削除するのを手伝ってください。

4

3 に答える 3

5

Comparator問題はキャストではなく、生の参照に割り当てているという事実です。型パラメーターをfs参照に配置します。

Comparator<Integer> fs = Collections.reverseOrder(rs);

キャストは不要で取り外し可能です。

于 2013-10-02T15:50:36.420 に答える
3

問題はキャストからではなく、コンパレーターのジェネリックパラメーターから発生します

//This one is not parameterized
Comparator fs=(Comparator<Integer>)Collections.reverseOrder(rs); // Same result with casting or without casting
Collections.sort(ts,fs)

と置換する

Comparator<Integer> fs=(Comparator<Integer>)Collections.reverseOrder(rs); 
于 2013-10-02T15:50:21.917 に答える
1

を使用しComparator<Integer> fs = Collections.reverseOrder(rs);ます。

于 2013-10-02T15:52:49.743 に答える