JavaのListの宣言方法色々

JavaのListの宣言方法色々

Listの宣言方法をいくつか書きます。

List<String> list = new ArrayList<>();
list.add("test1");
list.add("test2");

最近よく見るのがArraysクラスを使用した宣言でしょうか。

List<String> list = Arrays.asList("test1", "test2", "test3");

これはデメリットがあって固定長のlist変数になってしまいます。

続けて

list.add("test4");

などとすると、UnsupportedOperationExceptionが発生します。

回避するには

List<String> list = new ArrayList<String>(Arrays.asList("test1", "test2", "test3"));

としたら回避できたりもします。

インスタンスイニシャライザ

この書き方は組込の人が書いていて初めて知ったのですがインスタンスイニシャライザという記述方法です。

List<String> list = new ArrayList<String>() {
  {
    add("test1");
    add("test2");
    add("test3");
  }
};

これに対してスタティックイニシャライザっていうのもありますがListのようなコレクションクラスはインスタンスイニシャライザを使用します。

java.util.Collections

CollectionsクラスのaddAllメソッドで初期化します。

List<String> list = new ArrayList<String>();
Collections.addAll(list, "test1", "test2", "test3");
list.add("test4");

これくらいしか知りませんが十分だと思います。

インスタンスイニシャライザ内での例外

インスタンスイニシャライザ内で例外を発生させてみました。


import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("serial")
List<String> list = new ArrayList<String>() {
{
get(2); // IndexOutOfBoundsExceptionが発生する
add("test1");
add("test2");
add("test3");
}
};
}
}
view raw

gistfile1.txt

hosted with ❤ by GitHub

普通にエラーとなりますが、スタティックイニシャライザの場合は、ExceptionInitializeErrorが発生します。

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました