takeda_san’s blog

JavaFXと機械学習を頑張る方向。

コレクションにファクトリーメソッドが追加されたらしい

まだまだ続くよJava9お試し。
今回はコレクションフレームワークのお話。

List<String> list = new ArrayList<>();
list.add("ひとつめ");
list.add("ふたつめ");

Map<String, String> map = new HashMap<>();
map.put("きー1", "ばりゅー1");
map.put("きー2", "ばりゅー2");

Set<String> set = new HashSet<>();
set.add("いち");
set.add("に");

リスト、マップ、セットの実装数あれど、使うのは大体この3クラス。
右辺の総称型の中身を書かなくてよくなって、少し楽になりましたが、初期化もちょっと簡単に書けるようになりませんかね・・・?
というわけで、Java9からファクトリーメソッドが用意されました。

Javadocのofメソッドが、該当します。

List (Java Platform SE 9 [build 171])

Map (Java Platform SE 9 [build 171])

Set (Java Platform SE 9 [build 171])

まぁ、なんだ…引数多いな。
言いたいことはよくわかるが…引数多いな。特にmap。
コード補完みてると、圧倒的な存在感だぞ。

f:id:takeda_san:20170526233448p:plain

で、書き直したのがこちら。

List<String> list = List.of("ひとつめ", "ふたつめ");
Map<String, String> map = Map.of("きー1", "ばりゅー1", "きー2", "ばりゅー2");
Set<String> set = Set.of("いち", "に");

すっきり。
ちなみに、ofで作成したコレクションは不変になるとのことで変更しようとすると実行時に怒られます。

List<String> list = List.of("ひとつめ", "ふたつめ");
list.add("みっつめ");
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.base/java.util.ImmutableCollections.uoe(Unknown Source)
    at java.base/java.util.ImmutableCollections$AbstractImmutableList.add(Unknown Source)
    at Main.main(Main.java:12)