LoginSignup
22
19

More than 3 years have passed since last update.

Java9,10,11の新機能

Last updated at Posted at 2018-12-03

はじめに

どうも@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

これはつまりローカル変数の型推論機能です

sample.java
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は知っておかないとなどあればコメントいただけると助かります!

22
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
19