Collection.sort(list)
メソッドを単にlist.sort()
と呼ぶ以上の理由がありますか?内部的にCollection.sort
は、List
クラスのsort
メソッドを呼び出すだけです。Collection.sort(list)とlist.sort()の相違点
ほとんど誰もがCollection.sort
を使用するように指示していることは驚くべきことです。どうして?
Collection.sort(list)
メソッドを単にlist.sort()
と呼ぶ以上の理由がありますか?内部的にCollection.sort
は、List
クラスのsort
メソッドを呼び出すだけです。Collection.sort(list)とlist.sort()の相違点
ほとんど誰もがCollection.sort
を使用するように指示していることは驚くべきことです。どうして?
これは単なるAPIの変更です。 Javaのように広く普及している言語では、一般的に何が起きるのかはある程度の期間ですが、従来のサポートを維持するためには古い方法が望ましいです。
この期間が過ぎると、古いAPIは非推奨になります(またはそうでない場合もありますが、どちらも無限に残ります)。この期間内に、新しいAPIが改良され、その機能が元の実装からわずかに分岐し、開発者に採用されるよう促されます。新しいAPIの要件/結果が少しばらつき、実装が大幅に変更される可能性があります。
最後に、新しいAPIが引き継がれ、古いAPIは不要になり、削除されます。 Javaと同じくらい広く採用されている言語では、これは何年も何十年もかかることがあります。開発者はAPIを削除する計画を立てることができますが、コミュニティによって強制的にAPIを残しておく必要があります。
Sunは下位互換性を保つことで有名になっていました。これは、現代のJVMで20年前のコードをそのまま実行できるようにするものです。 –
あなたが参照しているメソッドList.sort(comparator)
がJava 8で導入されましたが、ユーティリティメソッドCollections.sort
はJava 1.2以降に導入されました。
このように、あなたはインターネット上でそのユーティリティメソッドについて言及していますが、これはJDKがずっと長くなっているからです。
Collections.sort
was made in 8u20の実装の変更点に注意してください。
デフォルトのメソッドがjava 8のインターフェイスで利用可能になるまで、list.sort()を導入できませんでした。 –
なぜlist.sortをデフォルトメソッドなしで導入できなかったのか分かりません。 – emory
@emoryデフォルトメソッドのサポートが追加される前に、新しいメソッドをインターフェイスに導入すると、インターフェイスの既存の実装がすべて破損してしまいます。 –