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");
これくらいしか知りませんが十分だと思います。
インスタンスイニシャライザ内での例外
インスタンスイニシャライザ内で例外を発生させてみました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | |
} | |
}; | |
} | |
} |
普通にエラーとなりますが、スタティックイニシャライザの場合は、ExceptionInitializeErrorが発生します。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント