[解決済み] collection.sort/比較可能なコードにおけるジェネリック<T extends Comparable<? super T>>の説明?
質問内容
私は、collection.sort を通して私のクラスの自然な順序付けを提供するために、比較可能なインターフェイスを常に使用しています。
基本的には、personクラスがあれば、comparableインターフェースを実装してもらい、compareToの実装を提供することになります。しかし、javadocsのCollections.sortの定義には、次のような署名がある。
public static <T extends Comparable<? super T>> void sort(List<T> list)
このジェネリックの定義が全く理解できないのですが?単に次のように記述すればよいのではないでしょうか?
<T implements Comparable<T>>
どなたか教えてください。
どのように解決するのですか?
実は、これは、T
できる
インプリメント
Comparable<? super T>
だけでなく
Comparable<T>
.
例えば、以下のような意味です。
Student
クラスを実装することができます。
Comparable<Person>
ここで
Student
のサブクラスです。
Person
:
public class Person {}
public class Student extends Person implements Comparable<Person> {
@Override public int compareTo(Person that) {
// ...
}
}
この場合、Listの並べ替えは
Collections.sort()
をベースにしたもののみです。
Person
のプロパティを渡すからです。
Student
インスタンスを
compareTo()
を
Person
(もちろん、ダウンキャスティングしない限り)。
しかし、実際には
Student
クラスが実装する
Comparable<Person>
. それは
Person
を実装していることでしょう。
Comparable<Person>
と
Student
はその実装を継承しています。しかし、最終的な結果は同じです。
List<Student>
を
Collections.sort()
でソートしてもらう。
Person
のプロパティを指定します。
との違いは
Comparable<T>
と
Comparable<? super T>
は、より明白に
Collections.sort()のオーバーロード版。
を取る。
Comparator<? super T>
:
class ByAgeAscending implements Comparator<Person> {
@Override public int compare(Person a, Person b) {
return a.getAge() < b.getAge();
}
}
List<Student> students = getSomeStudents();
Collections.sort(students, new ByAgeAscending());
関連
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】intがnullであるかどうかを確認する方法
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み】PECS(Producer Extends Consumer Super)って何?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】Eclipseがエラーメッセージ "Java was started but returned exit code = 1" を返す
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】Javaの".class expected "について