モジュールインポート宣言
モジュールを指定した一括インポートが可能になります。
モジュールインポートはモジュール名を指定して以下のように宣言します。
import module java.base;
モジュールによってエクスポートされる全てのパッケージのすべてのパブリック・トップレベル・クラスとインタフェースがインポートされます。
java.se
のようなモジュールは、パッケージをエクスポートしませんが、推移的に他の19個のモジュールを必要とします。java.se
をモジュールインポートすると、これらが再帰的にインポートされます。
これにより、ソース冒頭の大量のインポート宣言を圧縮することができるようになります。
なお、無名モジュールはもちろんモジュールインポート宣言することはできません。
曖昧なインポート
モジュールをインポートすると複数のパッケージをインポートすることになります。 異なるパッケージから同じ名前のクラスをインポートする場合、名前が曖昧となりコンパイルエラーとなる場合があります。
例えば、以下のケースでは Element という名前が曖昧なためエラーとなります。
import module java.desktop; Element e = ... // エラー
これは、java.desktop
モジュールには、同名の javax.swing.text.Element
と javax.swing.text.html.parser.Element
が含まれるためです。
このようなケースでは、以下のように通常のインポートを重ねることで曖昧性を回避することができます。
import module java.desktop; import javax.swing.text.Element; Element e = ...
プレビュー言語機能
モジュールインポート宣言はプレビュー言語機能です。
コンパイルには --release 23 --enable-preview
オプションを指定する必要があります。
実行時には --enable-preview
オプションを指定する必要があります。