web-dev-qa-db-ja.com

List.of()またはCollections.emptyList()

List.of(...)またはCollections.unmodizableList() の特殊なケースとして---推奨されるJava 9の方法でおよび不変リスト?

書き続ける

Collections.emptyList();

またはに切り替えます

List.of();
21
Sormuras

空で不変のリストを指すための好ましいJava 9の方法は何ですか?

違いはかなり微妙なので、「優先」は達成したいことによって異なります。いくつかの動作の違い:

  • _List.of_は、何らかの奇妙な理由で発生した場合、contains(null)呼び出しで例外をスローします。
  • JDK8以前ではemptyList()を逆シリアル化できますが、_List.of_は逆シリアル化できません。

空のリストが必要であることを伝えるために、emptyList()の方が見栄えがよいかもしれませんが、これは一時的な規則にすぎません。開発者がList.of()Collections.emptyList()よりもはるかに短い)を使い始めると、それは既知の受け入れられた方法になります。これはまったく新しい方法です。考えてみれば、私たちが使っているコンストラクトの中には、それ自体が何をしているのかを必ずしも伝えていないものもありますが、慣れてきました。

したがって、厳密に好ましい方法はありません。動作が重要でない場合は、必要なものを使用してください。

7
user1803551

Collections.emptyList()は、呼び出しごとに新しいオブジェクトを作成する必要はありません。シングルトン_EMPTY_LIST_オブジェクトを返すのが一般的です OpenJDKのように 。さらに、プレースホルダーの入力を忘れるのではなく、空のリストをmeanするつもりであることは明らかです。

emptyList()を使用します。高速(最大Javaターゲットレベル1.9))であり、読みやすくなっています。

18