Java List Initialization in One Line (日本語)
概要
このクイックチュートリアルでは、ワンライナーを使用してリストを初期化する方法について調べます。
さらに読む:
コレクション。emptyList()対新しいリストインスタンス
Java ArrayListのガイド
配列から作成
配列からリストを作成できます。 また、配列リテラルのおかげで、それらを一行で初期化できます。
配列の作成を処理するためにvarargsメカニズムを信頼できます。 これにより、より簡潔で読みやすいコードを書くことができます。
このコードのresultインスタンスはListインタフェースを実装しますが、javaではありません。ユーティル,ArrayListまたはLinkedList。 代わりに、これは元の配列に裏打ちされたリストです。
クラスの名前はArrayListですが、javaではArrayListです。ユーティル配列パッケージ。
2.1. 固定サイズ
配列からの結果インスタンス。asListは固定サイズになります:
2.2。 共有参照
元の配列とリストはオブジェクトへの同じ参照を共有します。
ストリームから作成(Java8)
ストリームをあらゆる種類のコレクションに簡単に変換できます。,
したがって、ストリームのファクトリメソッドでは、リストを一行で作成および初期化できます。
ここでは、コレクターに注意する必要があります。toList()は、返されたリストの正確な実装を保証しません。
返されたインスタンスの可変性、直列化可能性、またはスレッド安全性に関する一般的な契約はありません。 そこで当社のコードでよいと思いなこれらの物件です。
一部のソースはそのストリームを強調表示します。(…)の。collect(…アスリスト()。, しかし、ほとんどすべてのケースでは、それはほとんど違いがあるようなマイクロ最適化です。
ファクトリメソッド(Java9)
JDK9では、コレクションにいくつかの便利なファクトリメソッドが導入されています。
返されるインスタンス それを越えて、工場方法にスペース効率および糸の安全で複数の利点があります。
このトピックについては、この記事で詳しく説明します。,
ダブルブレース初期化
いくつかの場所では、ダブルブレース初期化と呼ばれるメソッドを見つけることができます。
“ダブルブレース初期化”という名前はかなり誤解を招くものです。 の構文がコンパクトなので危険を隠すようにフードです。
Javaには、実際には二重ブレース構文要素はありません。
外側の中かっこを使用して、ArrayListのサブクラスとなる匿名の内部クラスを宣言します。, これらの中括弧の中でサブクラスの詳細を宣言できます。
いつものように、インスタンス初期化子ブロックを使用することができ、それが中括弧の内側のペアが由来する場所です。
この構文の簡潔さは魅力的です。 しかし、それは反パターンと考えられています。
ダブルブレース初期化の詳細については、こちらの記事をご覧ください。
結論
現代のJavaは、一行でコレクションを作成するためのいくつかのオプションを提供します。 私達が選ぶ方法は技術的な推論よりもむしろ個人的な好みにほとんど完全にある。,
重要な点は、優雅に見えますが、匿名の内部クラス初期化(別名ダブルブレース)のアンチパターンには多くの悪影響があるということです。
いつものように、コードはGitHubで利用可能です。
春の学習コースを通じて、Spring5とSpring Boot2を開始します:
>>コースをチェックアウト