1. 概要

このチュートリアルでは、Javaプレビュー機能の背後にある動機、実験的な機能との違い、およびさまざまなツールでそれらを有効にする方法について説明します。

2. 機能をプレビューする理由

今では誰もが知っていることでしょうが、Java機能のリリースは6か月ごとに配信されます。 これは、新しいJava機能の待機時間が短縮されることを意味しますが、同時に、新機能に関するフィードバックに対応する時間も短縮されます。

これがここで話しているJavaです。 膨大な数の本番システムを開発するために使用されます。 その結果、1つの実装での小さな誤動作や不十分な機能設計でさえ、非常にコストがかかることが判明する可能性があります。

新機能が安定していることを確認する方法が必要です。 さらに重要なことに、彼らはコミュニティのニーズに適合しなければなりません。 しかし、どのように?

JEP-12 のおかげで、「レビュー言語とVM機能」を配信に含めることができます。 このようにして、コミュニティは実際のシナリオで新機能をチェックアウトできますが、実際には本番環境ではありません。

コミュニティのフィードバックに基づいて、プレビュー機能を改良することができます。複数のリリースで数回行うこともできます。 最終的に、この機能は永続的になる可能性があります。 ただし、場合によっては、提供されたレビューによってプレビュー機能が完全に取り消される可能性があります。

3. プレビューと実験的機能

Java プレビュー機能は完全に指定され、評価中の機能が開発されています。 したがって、彼らはまだ最終状態に達していない。

高品質であるため、さまざまなJDK実装には、各Java配信内で計画されているすべてのプレビュー機能を含める必要があります。 ただし、 a Javaリリースは、以前のリリースのプレビュー機能を引き続きサポートできません。

プレビュー機能は、基本的に、コミュニティにレビューとフィードバックの提供を促すための単なる方法です。 さらに、すべてのJava機能が最終的なものになるためにプレビュー段階を通過する必要があるわけではありません。

プレビュー機能についてJEP-12が言っていることは次のとおりです。

プレビュー言語またはVM機能は、設計、仕様、および実装がすべて完了している新機能ですが、Java SEで最終的かつ永続的なステータスを達成する前に、幅広い公開と評価の期間の恩恵を受けるでしょう。プラットフォームまたはその他の改良または削除中。

一方、実験的機能は完全ではありません。 それらのアーティファクトは、JDKアーティファクトから明確に分離されています。

実験的機能は不安定です、そのため、言語にリスクを課します。 したがって、さまざまなJDK実装には、さまざまな実験機能のセットが含まれる場合があります。

4. プレビュー機能の使用

プレビュー機能はデフォルトで無効になっています。 それらを有効にするには、 enable-preview 引数を使用する必要があります。これにより、すべてのプレビュー機能が一度に有効になります。

JavaコンパイラとJVMは、使用するプレビュー機能を含む同じJavaバージョンである必要があります。

JDK13のプレビュー機能であるテキストブロックを使用するコードをコンパイルして実行してみましょう。

String query = """
    SELECT 'Hello World'
    FROM DUAL;
    """;
System.out.println(query);

もちろん、お気に入りのIDEでJDK13を使用していることを確認する必要があります。 たとえば、OpenJDKリリース13をダウンロードして、IDEのJavaランタイムに追加できます。

4.1. Eclipseを使用

最初、Eclipseはコンパイルされないため、コードを赤でマークします。 エラーメッセージは、テキストブロックを使用するためにプレビュー機能を有効にするように指示します。

プロジェクトを右クリックして、ポップアップメニューからプロパティを選択する必要があります。 次に、Javaコンパイラに移動します。 これで、この特定のプロジェクトまたはワークスペース全体のいずれかでプレビュー機能を有効にすることを選択できます。

次に、デフォルトのコンプライアンス設定を使用するのチェックを外す必要があります。そうして初めて、Java13のプレビュー機能を有効にするをチェックできます。

4.2. IntelliJIDEAを使用

予想どおり、Java 13を使用しても、コードはデフォルトでIntelliJでコンパイルされず、Eclipseで表示されたものと同様のエラーメッセージが表示されます。

ファイルメニューのプロジェクト構造からプレビュー機能を有効にできます。 プロジェクトから、プロジェクト言語レベルとして 13(プレビュー)を選択する必要があります。

これでうまくいくはずです。 ただし、それでもエラーが続く場合は、プレビュー機能を有効にするためにコンパイラ引数を手動で追加する必要があります。 Mavenプロジェクトであるとすると、pom.xmlのコンパイラプラグインには次のものが含まれている必要があります。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>13</source>
                <target>13</target>
                <compilerArgs>
                    --enable-preview
                </compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

必要に応じて、同様の方法で、それぞれの構成内で他のMavenプラグインのプレビュー機能を有効にすることができます。

4.3. コマンドラインから

コンパイル時に、javacコマンドには2つの引数が必要です。enable-previewrelease

javac --release 13 --enable-preview ClassUsingTextBlocks.java

JDKリリースNは、リリースN-1またはそれ以前のリリースのプレビュー機能をサポートしていないことを思い出してください。 したがって、JDK 14で前のコマンドを実行しようとすると、エラーが発生します。

簡単に言うと、プレビュー機能を有効にするには、リリース引数で使用されているコンパイラ(およびJVM)のJDKリリースバージョンにNを設定する必要があります。

release 引数は、プレビュー機能を使用するコードが本番環境で熱心に使用されないようにするための単なる追加のガードです。

実行時に、javaコマンドはenable-preview引数のみを必要とします。

java --enable-preview ClassUsingTextBlocks

ただし、その特定のJDKリリースのプレビュー機能を使用するコードのみが実行されます。

5. 結論

この記事では、Javaのプレビュー機能、それらを使用する理由、およびそれらが実験的な機能とどのように異なるかを紹介しました。

次に、JDK 13のテキストブロックプレビュー機能を使用して、Eclipse、IntelliJ、Maven、およびコマンドラインのプレビュー機能の使用方法を段階的に説明しました。