はじめに
どうも@chan_kakuです!
今回はそろそろJava8からJava11に移行しようかなーと言う人のためにJava9から11で追加されたAPI、機能について説明させていただきます。
Java9
Java9の新機能についてはこちらを参考にしてください
モジュールシステム
Java9ではProject Jigsawと呼ばれるプロジェクトがありました。
詳細は以下のリンク先にあります
Project Jigsawについて
つまり、以下の4点がこのプロジェクトのゴールでした
Make it easier for developers to construct and maintain libraries
and large applications
ライブラリや大規模アプリケーションのメンテナンスを容易にする
Improve the security and maintainability of Java SE Platform Implementations in general, and the JDK in particular
Java SEプラットフォームのセキュリティと保守性の向上
Enable improved application performance
アプリケーションパフォーマンスの向上
Enable the Java SE Platform, and the JDK, to scale down for use in small computing devices and dense cloud deployments.
Java SEプラットフォームとJDKを低い性能のコンピューティングデバイスや密集したクラウド展開で使用できるように縮小できる
これらを解決するために、Java9ではモジュールシステムが導入されました。
モジュールシステムについてはこの辺りで詳しく説明されています
つまり、別のモジュール(ライブラリ)のpublic,protectedメンバーを使う時、または、別モジュールのためにpublic,protectedメンバーを使わせるときはmodule-info.javaと言うファイルを用意する必要があります。
このモジュールシステムによってモジュールの依存関係や、階層構造を以前に増して理解しやすくなります。
Java10
Java10の新機能はこちらにまとまっています。
個人的に気になった機能をピックアップしていきます
型推論
JEP 286: Local-Variable Type Inference
これはつまりローカル変数の型推論機能です
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
Javaでは何でもかんでもこのvarを使ってしまうと型がよくわからなくなってしまうので、そこまで頻繁に使うような印象はないですが、上記のように右側に型が明記してある場合には使えるのではないでしょうか?
Java11
例のごとくJava11の新機能はこちらにまとまっています
この中からいくつかピックアップしたいと思います。
ネストクラスのアクセス制限
JEP 181: Nest-Based Access Control
ここではネストメイトのプライベートアクセスをJVMのアクセスルールとして制限すると記述されています。
ちなみにここで出てきたネストメイトとは以下のように定義されています
A field or method R is accessible to a class or interface D if and only if any
of thefollowing conditions are true:
・R is private and is declared in a different class or interface C, and C and D, are nestmates.
これは使う側としては変わりはないのですが、バイトコードにすると今までよくわからないようなメソッドを読んでいたものちゃんと意図したものにようやくなった
というような感じです
HTTPクライアント
JEP 321: HTTP Client (Standard)
こちらはModanAPiやHTTP2,WebSocket,Reactiveに対応したと言うものです
型推論
JEP 323: Local-Variable Syntax for Lambda Parameters
こちらはJava10の説明でもあった型推論がラムダ式のパラメータとしても使えるようになったと言うものです。
最後に
Java9~11で様々なfeatureが追加されましたが、個人的にはここで紹介したあたりを押さえておけばひとまずは大丈夫かなという印象です。
他にもこのfeatureは知っておかないとなどあればコメントいただけると助かります!