先月末でJDK11はRampdownフェーズに入って、機能凍結されました。

なので、今後はAPIの追加・削除・変更はほとんどないと思われます。

おそらく、機能的には現在でているea20とほとんど同じものがJava11としてリリースされることになると思います。

JDK 11 Early-Access Builds

大きな機能変更としては、ここでJEPとしてまとまっています。

「JDK 11」 http://openjdk.java.net/projects/jdk/11/

Raw String Literalが間に合わなかったのはとても残念です。JDK11トレインに乗り遅れるからがんばるぞ！みたいな投稿があって仕様をまとめてからML上は音沙汰なしですが、Rampdownフェーズが始まってから機能追加するLate Enhancement Request Processというのがあるようなので、ここに賭けましょう。

JEP 3: JDK Release Process

Switch ExpressionはRelease 12とターゲットが明記されていますが、Raw String Literalsは まだターゲットが明記されておらず、11に入れることを諦めたわけではないと、一縷の望みが。

JEP 325: Switch Expressions

JEP 326: Raw String Literals

ともあれ、JDK11ではJEPにあげられている以外の変更も多く入っています。そこで、いま個人的に把握している範囲でのAPI変更を列挙しておきます。





trim() / trimLeft() / trimRight() とほぼ同じ役割なのですが、全角スペースなども空白とみなされるところが違います。

空白だけかどうかを判定するメソッドが追加されました。全角スペースも空白として判定されます。

辞書順に文字列を比較します 動作的にはStringのcompareToがa.compareTo(b)と書けていたのがCharSequenceに対応してstaticメソッドになった感じですね。どちらかがnullなら ぬるぽ です。

いままで微妙に不便だったのがちょっと便利になりました。 JDK10.0.1

いままでPaths.get()を使っていたところが、ほかの作法と同様にof()で得れるようになりました。

1メソッドで文字列読み込みできるようになりました。

1メソッドで文字列保存できるようになりました。

条件を反転する必要があるためにメソッド参照が使えなかったところで、メソッド参照が使えるようになります。

いままで型をちゃんとあわせた配列をListなどから作るのにlist.toArray(new String[list.size())])みたいなかっこわるい記述が必要だったのが、ちょっとかっこよく書けるようになりました。

いままでisPresent()はありましたが、isEmpty()も追加されました。

asPredicateはfindするPredicateだったのですが、matchするPredicateが用意されました。

削除されました。stop()は残ってます。

IndexOutOfBoundsException

むやみにハイフンが入ってたのが取り除かれました。

JDK10.0.1

jshell> List.of().get(0) | java.lang.IndexOutOfBoundsException thrown: Index 0 out-of-bounds for length 0 | at Preconditions.outOfBounds (Preconditions.java:64) | at Preconditions.outOfBoundsCheckIndex (Preconditions.java:70) | at Preconditions.checkIndex (Preconditions.java:248) | at Objects.checkIndex (Objects.java:372) | at ImmutableCollections$List0.get (ImmutableCollections.java:106) | at (#6:1)



JDK11-ea14

jshell> List.of().get(0) | Exception java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 | at ImmutableCollections$ListN.get (ImmutableCollections.java:411) | at (#3:1)



実はList.of()がList0とかList1とか要素数にあわせた専用クラスのインスタンスを返してたのですが、それもListNに統一されたことがわかります。



