両方の型の変数を比較したいのですが、T extends Number
2 つの変数のどちらがもう一方より大きいか等しいかを知りたいです。残念ながら、正確な型はまだわかりませんが、 のサブタイプになることはわかっていますjava.lang.Number
。どうすればそれができるでしょうか?
編集: s を使用した別の回避策を試してみましたがTreeSet
、これは実際に自然な順序付けで機能しました (もちろん、AtomicInteger と AtomicLong を除くすべてのサブクラスがNumber
実装しているので、機能しますComparable
)。したがって、重複した値は失われます。s を使用するとList
、Collection.sort()
境界の不一致によりリストが受け入れられません。非常に不満足です。
ベストアンサー1
これは、Number を拡張し、それ自体と比較可能なすべてのクラスで機能するはずです。 & Comparable を追加することで、すべての型チェックを削除し、Sarmun の回答と比較した場合に実行時の型チェックとエラーのスローを無料で提供できるようになります。
class NumberComparator<T extends Number & Comparable> implements Comparator<T> {
public int compare( T a, T b ) throws ClassCastException {
return a.compareTo( b );
}
}