2016-01-20 4 views
15

Collection.sort(list)メソッドを単にlist.sort()と呼ぶ以上の理由がありますか?内部的にCollection.sortは、Listクラスのsortメソッドを呼び出すだけです。Collection.sort(list)とlist.sort()の相違点

ほとんど誰もがCollection.sortを使用するように指示していることは驚くべきことです。どうして?

+1

デフォルトのメソッドがjava 8のインターフェイスで利用可能になるまで、list.sort()を導入できませんでした。 –

+0

なぜlist.sortをデフォルトメソッドなしで導入できなかったのか分かりません。 – emory

+1

@emoryデフォルトメソッドのサポートが追加される前に、新しいメソッドをインターフェイスに導入すると、インターフェイスの既存の実装がすべて破損してしまいます。 –

答えて

3

これは単なるAPIの変更です。 Javaのように広く普及している言語では、一般的に何が起きるのかはある程度の期間ですが、従来のサポートを維持するためには古い方法が望ましいです。

この期間が過ぎると、古いAPIは非推奨になります(またはそうでない場合もありますが、どちらも無限に残ります)。この期間内に、新しいAPIが改良され、その機能が元の実装からわずかに分岐し、開発者に採用されるよう促されます。新しいAPIの要件/結果が少しばらつき、実装が大幅に変更される可能性があります。

最後に、新しいAPIが引き継がれ、古いAPIは不要になり、削除されます。 Javaと同じくらい広く採用されている言語では、これは何年も何十年もかかることがあります。開発者はAPIを削除する計画を立てることができますが、コミュニティによって強制的にAPIを残しておく必要があります。

+2

Sunは下位互換性を保つことで有名になっていました。これは、現代のJVMで20年前のコードをそのまま実行できるようにするものです。 –

21

あなたが参照しているメソッドList.sort(comparator)がJava 8で導入されましたが、ユーティリティメソッドCollections.sortはJava 1.2以降に導入されました。

このように、あなたはインターネット上でそのユーティリティメソッドについて言及していますが、これはJDKがずっと長くなっているからです。

Collections.sortwas made in 8u20の実装の変更点に注意してください。

関連する問題