Java10の新機能を解説!劇的に変更されたサポートポリシーとは?

Java10が2018年3月についにリリースされました。

6ヶ月ぶりのアップデートですが、新しい機能が追加されています。

そこで、今回は初心者向けにJava10の新機能をわかりやすく解説します!

この記事では、Java10の新機能について


・Javaとは?Javaの特長
・Java10の新機能
・Java10の環境構築
・ローカル変数の型推論
・copyOfメソッドの追加
・orElseThrowメソッドの追加

など応用的な内容についても解説していきます。

今回はJava10の新機能について、使い方をわかりやすく解説します!

※現在、Java11がすでにリリースされているためこの記事の情報が古い可能性があります。

なお、Javaの記事については、こちらにまとめています。

目次

そもそもJavaとは?Javaの特長

Java10の説明に入る前に、まずはJavaについて簡単におさらいしておきましょう。

Javaは1990年代にSun Microsystemsが開発・発表したオブジェクト指向という考え方を取り入れた言語です。

2010年にOracleが買収し、Oracle製品の1つになりました。

Javaは家電やモバイル機器を始めとして、多くのデバイスに搭載されています。

国内でもスマートフォンなどに搭載されていて、アプリ開発を行うにはJava言語を使って開発することになります。

2018年3月にリリースされたJava10でも新機能が追加されているので、その新機能について解説していきます。

これまでのJavaについては、こちらのサイトでも詳しく解説していますので、ぜひ参考にしてください。

Java10での変更点

Java10のリリース

Java10は2018年3月20日に正式リリースされました。

前のバージョンのJava9が正式リリースされたのが2017年9月22日でしたので、6ヶ月ぶりのアップデートになります。

これまでは数年ごとに大きな機能追加を行いアップデートしてきましたが、Java9以降は6ヶ月ごとにアップデートを行うとOracle社は発表していました。

その発表どおり6ヶ月でのアップデートとなりました。

これまでは数年ごとのアップデートだったので、Javaは他の言語や技術と比較すると、進化の遅い、やや古めかしいものと見られるようになっていました。

こうした反省をふまえてJavaをこれまでより速いペースで前進させようとしているようです。

そして今回のリリースと共に大きな話題となっているのが、今回リリースされるJava10が無償で入手可能なOracke JDKの最後のメジャーバージョンであるということです。

さらに6ヶ月後にリリース予定のJava11およびそれ以降のOracle JDKは、Oracleと有償サポート契約を結んだユーザーにのみ提供されるようになります。

Oracle JDK11は無償公開されないということです。

その代わりJava11からはOracle JDKと同じ機能と品質を備えたOpenJDKが無償版のJavaとしてリリースされます。

そしてもう一つ重要な点がサポートポリシーについてです。

メジャーバージョンごとのメンテナンス期間が、次のメジャーバージョンが出るまでの間となっています。

次のバージョンのリリース予定は2018年9月ですが、Java10のメンテナンス期間も2018年の9月までということになり、それ以降はリリースされなくなります。

Java9はJava10がリリースされたので、サポートが終了しリリースも終了しています。

ただし、Oracle JDK、OpenJDK共にLTS(長期サポート)版を3年ごとにリリースする動きがあるようです。

現在の予定ではJava11、Java17がLTS版として設定されています。

新機能一覧

前回のJava8からJava9のアップデートまでは3年6ヶ月の期間があり、たくさんの機能追加がありました。

それに対して、今回のJava9からJava10へのアップデートまでは6ヶ月ですので、前回に比べれば追加された機能はそれほど多くはありません。

今回の機能追加の中でよく使われそうな機能について表にまとめます。

項目説明
ローカル変数の型推論varを用いたローカル変数の型推論
copyOfメソッドの追加コレクションのコピーメソッドの追加
orElseThrowメソッドの追加Optionalでのメソッドの追加

これらの他にも、ガーベージコレクタの入れ替え可能、不揮発性メモリ対応、バージョン表記に関するルール変更などの追加があります。

ちなみに前のバージョンJava9での主な機能追加については、こちらで詳しく解説しています。

ぜひ参考にしてください。

Java10の環境構築

Java10の新機能を確認する前にJava10での開発環境を構築しなければなりません。

ダウンロードとインストール

Java10はこちらからダウンロードできます。

http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

OSを選択してダウンロードしましょう!

java10_01

インストールについては、Java8以前と大きく変わりません。

こちらのサイトで詳しく解説していますので、参考にしてください。

アップデート

Java10にアップデートするためには現在パソコンにインストールされているJavaのバージョンがJava10かJava9以前か確認する必要があります。

ここでは、使うパソコンのOSはWindows10の場合を代表例として説明します。

Javaのバージョンを確認する方法は以下のとおりです。

Windows 10-プログラムの確認
1.「スタート」をクリックします。
2.「設定」を選択します
3.「システム」を選択します
4.「アプリと機能」を選択します
5.プログラムの一覧からJavaを探し出してバージョンを確認します

Java8check

この画像ではJava8がインストールされています。

Java8以前がインストールされている場合は、Javaをアンインストールする必要があります。

Javaをアンインストールできたら、前章のダウンロードの方法を参考にしてJava9をインストールしてください。

Windows 10-プログラムのアンインストール
1.「スタート」をクリックします。
2.「設定」を選択します
3.「システム」を選択します
4.「アプリと機能」を選択します
5.アンインストールするプログラムを選択し、「アンインストール」ボタンをクリックします。
6.プロンプトに従って、アンインストールを完了します

公式参考サイト
https://java.com/ja/download/faq/remove_olderversions.xml

Eclipseでの利用

こちらのサイトで解説しているPleiadesでJava10の開発環境も自動構築することができます。

最新の「Pleiades All in One」を選択するとJava10に対応しています。

Pleiadesの環境が構築できたらJavaのプロジェクトを新規作成するときに「JavaSE-10」を選択してください。

これでJava10を使うことができます。

java10_02

ローカル変数の型推論

Java10の大きな変更点の1つにvarを使って、ローカル変数の型推論を利用できるようになりました。

型推論はすでにJavaScriptやC#などでも用いられています。

ローカル変数に値を代入する際に右辺のリテラルやコンストラクタの記述から、自動でローカル変数の型が推定されます。

ただし、ローカル変数と特定しているので、クラス変数や定数としては利用できません

ローカル変数の型推論について、サンプルコードで確認しましょう。

import java.util.ArrayList;
import java.util.List;

public class Java10Sample {
    public static void main(String[] args) {
        var i_num = 123;
        var d_num = 1.23;
        var f_num = 1.23F;
        System.out.println(i_num);
        System.out.println(d_num);
        System.out.println(f_num);

        var str = "Hello World!";
        var list = new ArrayList<String>(){
            {
                add("Apple");
                add("Orange");
                add("Melon");
            }
        };
        var listOf = List.of("a", "b", "c", "d");
        System.out.println(str);
        System.out.println(list);
        System.out.println(listOf);
    }
}

実行結果:

123
1.23
1.23
Hello World!
[Apple, Orange, Melon]
[a, b, c, d]

ArrayListでの宣言については、こちらで詳しく解説していますので、ぜひ参考にしてください。

コレクションのofメソッドはJava9から利用できます。

こちらで詳しく解説していますので、ぜひ参考にしてください。

また、クラス変数については、こちらで詳しく解説していますので、ぜひ参考にしてください。

定数については、こちらで詳しく解説していますので、ぜひ参考にしてください。

copyOfメソッドの追加

List、Map、Setなどのコレクションクラスに対して、copyOfメソッドが追加されました。

copyOfメソッドを使うことで、実際にコピーせずに参照を返すことができます。

なお、copyOfメソッドで作成されたオブジェクトは変更できません

ofメソッドで作成されたオブジェクトも変更できませんが、これと同様です。

変更する場合はUnsupportedOperationExceptionの例外が発生します。

それではcopyOfメソッドの使い方をサンプルコードで確認しましょう。

import java.util.List;
import java.util.Map;

public class Java10Sample {
    public static void main(String[] args) {
        var list1 = List.of("a", "b", "c", "d");
        var list2 = List.copyOf(list1);

        System.out.println(list2);

        var map1 = Map.of("key1", "val1");
        var map2 = Map.copyOf(map1);

        System.out.println(map2);
    }
}

実行結果:

[a, b, c, d]
{key1=val1}

ofメソッドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

ListやMapの使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

orElseThrowメソッドの追加

Java8でOptionalクラスが追加されました。

値のない状態を「null」と言いますが、開発中はnullが原因で意図しないエラーが起こることがよくあります。

そのためif文などを使ってnullチェックの処理を書く必要がありましたが、Optionalクラスを使うと簡潔に書くことができます

Java10ではこのOptionalクラスにさらにorElseThrowメソッドが追加されました。

import java.util.Exception;
import java.util.Optional;

public class Java10Sample {
    public static void main(String[] args) {
        Optional<String> opt = Optional.empty();
        try {
            String str = opt.orElseThrow();
        } catch (NoSuchElementException ex) {
            // empty()の場合の処理
        }
    }
}

Optionalクラスの使い方についてはこちらのサイトで詳しく解説していますので、参考にしてください。

OptionalクラスのメソッドについてはJava9でも追加がありました。

こちらで詳しく解説していますので、ぜひ参考にしてください。

まとめ

今回はJava10の主な新機能について解説してきましたが、いかがでしたか?

Javaのリリースが6ヶ月ごとになり、追加された機能はそれほど多くはないですが、これらの機能を使いより楽をして品質の高いコードをかけるといいですね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次