1. ホーム
  2. java

java.utilsでEnumerationがListでなくArrayListに変換されるのはなぜですか?

2023-12-16 21:22:44

質問

のように Collections.list() メソッドが java.utils パッケージの ArrayList<T> の代わりに List<T> ?

明らかに ArrayListList を返しますが、一般的には実装型ではなくインターフェース型を返すのが良いという印象があります。

どのように解決するのですか?

免責事項: 私はJDKの作者ではありません。

を書くのが正しいということに同意します。 独自のコード をインターフェイスに書くのは正しいことですが、もしあなたが ミュータブル コレクションを第三者に返すのであれば、第三者にどのような List を第三者に知らせることが重要です。

LinkedList そして ArrayList は、様々な操作において、パフォーマンス的に非常に異なっています。例えば、最初の要素を削除する場合 ArrayListO(n) の最初の要素を削除することはできません。 LinkedListO(1) .

戻り値の型を完全に指定することで、JDKの作者は 余分な情報を伝達する そのため、このメソッドを適切に使用するようにコードを記述することができます。もしあなたが本当に LinkedList が本当に必要なら、ここで指定しなければならないことがわかるでしょう。

最後に、実装よりもインターフェイスにコードを書く主な理由は、実装が変更されると考えている場合です。JDK の作者は、おそらく彼らが 決して を返すことはないでしょう。 LinkedList または Collections.UnmodifiableList . しかし、ほとんどの場合、やはりそうするのでしょう。

List<T> list = Collections.list(enumeration);