Java 23 でプレビュー公開される モジュールインポート宣言(JEP 476: Module Import Declarations)

blog1.mammb.com

openjdk.org

モジュールインポート宣言

モジュールを指定した一括インポートが可能になります。

モジュールインポートはモジュール名を指定して以下のように宣言します。

import module java.base;

モジュールによってエクスポートされる全てのパッケージのすべてのパブリック・トップレベル・クラスとインタフェースがインポートされます。

java.se のようなモジュールは、パッケージをエクスポートしませんが、推移的に他の19個のモジュールを必要とします。java.se をモジュールインポートすると、これらが再帰的にインポートされます。

これにより、ソース冒頭の大量のインポート宣言を圧縮することができるようになります。

なお、無名モジュールはもちろんモジュールインポート宣言することはできません。

曖昧なインポート

モジュールをインポートすると複数のパッケージをインポートすることになります。 異なるパッケージから同じ名前のクラスをインポートする場合、名前が曖昧となりコンパイルエラーとなる場合があります。

例えば、以下のケースでは Element という名前が曖昧なためエラーとなります。

import module java.desktop;

Element e = ...   // エラー

これは、java.desktop モジュールには、同名の javax.swing.text.Elementjavax.swing.text.html.parser.Element が含まれるためです。

このようなケースでは、以下のように通常のインポートを重ねることで曖昧性を回避することができます。

import module java.desktop;

import javax.swing.text.Element;

Element e = ...  

プレビュー言語機能

モジュールインポート宣言はプレビュー言語機能です。

コンパイルには --release 23 --enable-preview オプションを指定する必要があります。

実行時には --enable-preview オプションを指定する必要があります。