1. ホーム
  2. java

[解決済み] ArrayListの初期化を1行で行う。

2022-03-15 10:50:51

質問内容

テスト用にオプションのリストを作成したいと思いました。最初はこうしました。

ArrayList<String> places = new ArrayList<String>();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

そして、次のようにコードをリファクタリングしました。

ArrayList<String> places = new ArrayList<String>(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

何か良い方法はないでしょうか?

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

実は、おそらく一番いい方法は ArrayList を作成する必要がないので、あなたが書いたメソッドです。 List を、どのような形であれ

ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");

を参照するために、かなり多くのタイピングが必要なことです。 list のインスタンスを作成します。

インスタンス初期化子(ダブルブレース初期化子とも呼ばれる)を持つ無名の内部クラスを作成するなどの代替案があります。

ArrayList<String> list = new ArrayList<String>() {{
    add("A");
    add("B");
    add("C");
}};

しかし、この方法はあまり好きではありません。というのも、最終的にできるのは ArrayList インスタンス・イニシャライザを持つそのクラスは、1つのオブジェクトを作成するためだけに作成されます。

何が良かったかというと コレクション リテラルの提案 に対して プロジェクトコイン が受理された(Java 7で導入される予定だったが、Java 8にも含まれそうにない。)。

List<String> list = ["A", "B", "C"];

残念ながら、ここでは役に立ちません。 List ではなく ArrayList しかも、まだ利用できないし、利用できるようになるのかどうかもわからない。