1 Java言語の変更

この項では、Java SE 9以降のリリースで更新された言語機能の概要を示します。

Java SE 11のJava言語の変更

機能 説明 JEP

ローカル変数の型推論

ローカル変数の型推論: スタイル・ガイドラインも参照してください。

Java SE 10で導入されました。このリリースでは、暗黙的に型指定されるラムダ式の仮パラメータを宣言するときにvarを使用できるようにするためのサポートが強化されました。

ローカル変数の型推論は、初期化子を伴うローカル変数宣言に型推論を拡張します。

Java SE 10のJava言語の変更

機能 説明 JEP

ローカル変数の型推論

ローカル変数の型推論: スタイル・ガイドラインも参照してください。

このリリースで導入されました。

ローカル変数の型推論は、初期化子を伴うローカル変数宣言に型推論を拡張します。

JEP 286: ローカル変数の型推論

Java SE 9のJava言語の変更

機能 説明 JEP

Javaプラットフォーム・モジュール・システム。OpenJDKのProject Jigsawを参照してください。

このリリースで導入されました。

Java Platformモジュール・システムでは、モジュールという新しい種類のJavaプログラミング・コンポーネントが導入されています。モジュールは名前付きで自己記述型のコードとデータのコレクションです。タイプ(Javaのクラスとインタフェース)を含むパッケージのセットとしてコードが編成されており、リソースおよび他の種類の静的情報がデータに含まれます。モジュールはパッケージをエクスポートまたはカプセル化でき、他のモジュールに対する依存関係を明示的に表現できます。

Java Platform Module System (JSR 376)

言語の小さな機能拡張(Project Coin):

Java SE 7では、Project Coinとして導入されました。これはいくつかの修正で拡張されています。

JEP 213: Milling Project Coin

JSR 334: Javaプログラミング言語の小規模な機能拡張

さらに簡潔になったtry-with-resources文

finalとしてのリソースがすでにあるか、実質的にfinalの変数がある場合、新しい変数を宣言せずにその変数をtry-with-resources文で使用できます。「事実上final」の変数とは、初期化された後に値が変更されることがない変数のことです。

たとえば、次の2つのリソースを宣言したとします。

        // A final resource
        final Resource resource1 = new Resource("resource1");
        // An effectively final resource
        Resource resource2 = new Resource("resource2");

Java SE 7または8では、次のように新しい変数を宣言します。

        try (Resource r1 = resource1;
             Resource r2 = resource2) {
            ...
        }

Java SE 9では、r1およびr2を宣言する必要はありません。

// New and improved try-with-resources statement in Java SE 9
        try (resource1;
             resource2) {
            ...
        }

the try-with-resources文の詳細な説明は、Javaチュートリアル(Java SE 8以前)を参照してください。

プライベート・インスタンス・メソッドで許可される@SafeVarargsの注釈

@SafeVarargsの注釈がプライベート・インスタンス・メソッドで許可されます。これは、オーバーライドできないメソッドのみに適用できます。これらには、静的メソッド、finalインスタンスのメソッド、およびプライベート・インスタンスのメソッド(Java SE 9の新機能)が含まれます。

ダイアモンド構文および匿名内部クラス

匿名内部クラスと一緒にダイアモンド構文(山カッコが含まれた構文)を使用できます。Javaプログラムで記述できる型(intStringなど)は型指定型と呼ばれます。Javaプログラムに記述できないコンパイラ内部の型は非型指定型と呼ばれます。

非型指定型は、ダイアモンド演算子で使用される推論の結果として発生する場合があります。匿名クラスのコンストラクタを指定したダイアモンドを使用する推論型はクラス・ファイルの署名属性の型セット以外になる可能性があるため、匿名クラスが指定されたダイアモンドの使用はJava SE 7では許可されていませんでした。

アンダースコア文字は正当な名前ではない

アンダースコア文字("_")を識別子として使用すると、ソース・コードをコンパイルできなくなります。

プライベート・インタフェース・メソッドのサポート

プライベート・インタフェースのメソッドがサポートされます。このサポートにより、インタフェースの非抽象メソッド間でコードを共有できるようになります。