3

Integer と Double の両方をソートするメソッドを作成する必要があります。

public ArrayList<Number> sortDescending(ArrayList<Number> al){
    Comparator<Number> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public ArrayList<Number> sortAscending(ArrayList<Number> al){
    Collections.sort(al);
    return al;
}

問題は、sortAscending で次のエラーが発生することです。

範囲の不一致: Collections 型のジェネリック メソッド sort(List) は、引数 (ArrayList) には適用されません。推論された型 Number は、境界付きパラメーターの有効な代替ではありません < T extends Comparable < ? スーパーT>>

4

2 に答える 2

9

との交差の一般的な上限を使用する必要があります。NumberComparable<T>

public <T extends Number & Comparable<T>> ArrayList<T> sortDescending(ArrayList<T> al){
    Comparator<T> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}

すべての JDK Numbers(など)Floatは、Integerこの型付けに一致します。

初心者のために説明すると、構文は と の両方<T extends A & B>バインドTする方法です。 AB

参考までに、「または」ロジックの構文はありません (考えてみても意味がありません)。

于 2012-07-16T14:36:02.957 に答える
4

number が実装されていないため、エラーが発生していますComparable<Number>。number と Comparable の両方を拡張するように、一般的な制約を追加する必要があります。この場合:

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}
于 2012-07-16T14:35:47.843 に答える