エンジニア的なネタを毎週書くブログ

東京でWebサービスの開発をしています 【英語版やってみました】http://taichiw-e.hatenablog.com/

JavaDayTokyo 2017 Report 1 : Java9 関連

今年もJavaDayTokyoに出席させていただきました。この記事ではJava9関連についてまとめます。

Oracle的な目玉はJigsawとjshellでした。

が、

Jigsawは去年のJavaDayTokyoで集中的に話を聞いたけどあまり使いどころがないなぁ… と感じ、
jshellはあると便利だけどこれまた本番で使うようなものではない(あと、以前に触ってみた感じ、そんなに使い勝手いいとも思えない… 変わってるのかな)
ということでこの2つは外して話を聞いてきました。

そんな私に櫻庭さんの、こちらのセッションがドンピシャでした。

D1-A4 Java SE 9のすすめ

Compatibility

いままで一生懸命後方互換性を守り続けてきたJavaがついに一部捨てた… と言うのはすごい分岐点だとは思うのですが、捨てられるだけあって何それなやつは多く。
Java DBってなんや…

Milling Project Coin

Project Coin (Java7に主に取り込まれた、ダイアモンドなど、Javaを書きやすくするプロジェクト)を更にすすめるもの。
Milingがギザギザをつける なので 「『ギザジュウ』作ろうぜ!」的なニュアンスらしいw

StreamAPIで書きにくいよねーっていうのが一部書けるようになった
  • dropWhile
  • takeWhile
  • ofNullable

特にtakeWhileは使いそう。条件満たしたら終了。
これができなくてWhileとか、for + breakが結構残ってる感じ。

Optional
  • stream
  • ifPresentOrElse(action, elseAction)
  • or(supplier)

ifPresentOrElseは使えそうですね。Nullのときの処理をelseとして記述可能に。

CollectionのFactoryメソッド

ofで初期化ができるようになる!

public static final List<String> PLAYERS = List.of("則本", "嶋", "銀次");
public static final MAP<Integer, String> PLAYERS = Map.of(14, "則本", 37, "嶋", 33, "銀次");

もうArrays.asListとか書かなくてよし。
Mapも初期化できるようになったので、何回もputとかしなくてよし。
(テストコードも書きやすくなるんじゃないかなー)

ポイントとして
ofで作ったコレクションはイミュータブル。Javaの標準仕様でイミュータブルなコレクションが扱えるのは初なんだとか。
(これって実装クラスは何が返るんだ? ※あとで確認)

String関係

表立っての変更ではないけど、なかなかおもしろいです。

内部の実装がcharの配列からbyteの配列へ

今までは全ての文字をUTF-16のコードポイント(=16バイト)で表していたのだけど、アスキー文字の場合、8バイトあれば十分なのでbyte型の配列で表すことにした、というもの。
これは結構メモリの使用量変わってくるのでは。
(じゃあ逆に16バイト必要な文字はどう収まるんだろう?byte変数を2個使うのかな? それともそういうときはchar? ※あとで確認)
だったら逆に、サロゲートペアも、もう少し自然に見えるようにしてくれよ… って思ったけど無理か。
 

演算子での結合が StringBuilderに置き換え → invokeDynamicに置き換え

いちいちStrinbBuilderで結合してtoStringする時代が終わるのかしら

で、いつリリース?

今の予定では7月27日… ですが、結局JavaOneのころまでずれるんじゃないの… とのことでした。

今年は、これからド新規でいろいろなものを作っていくので、是非 9 を使いたいところなんですが… 果たして。