Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java 9入門】module-info.javaにおけるexports句の役割と使い方を徹底解説

Java 9のモジュールとは何か

Java 9で導入されたプラットフォーム・モジュールシステム(Project Jigsaw)において、モジュール(Module)とは、コードデータをひとつにまとめた単位です。モジュールには名前が付けられ、他のモジュールへの依存関係を宣言し、外部からアクセス可能なpublic型を含むパッケージをエクスポート(公開)し、利用するサービスや提供するサービス実装を指定します。

これらの設定はすべて、モジュールのルートディレクトリに配置されるmodule-info.javaファイルに記述します。

exports句の2つの形式

module-info.javaファイルでは、「exports」句を2通りの形式で使用できます。それぞれの特徴と使い方を見ていきましょう。

1)exports <package>:パッケージを外部に公開する

デフォルトの状態では、モジュール内のpublic型は、そのモジュールの外側からは一切見えなくなります。これはJava 9以前との大きな違いです。特定のパッケージ内のpublic型を他のモジュールから利用できるようにするには、そのパッケージを明示的にエクスポートする必要があります。

注意点として、エクスポートはクラスなどの型単位ではなくパッケージ単位で行われます。また、サブパッケージは自動的にはエクスポートされないため、必要であれば個別に宣言しなければなりません。

例えば、tp.com.tutorialspoint.modelパッケージのクラスやインターフェースを他のモジュールに利用させたい場合は、次のように記述します。

module com.tutorialspoint.model {
    exports tp.com.tutorialspoint.model;
}

ここで重要なのは、1つのパッケージは必ず1つのモジュールだけに存在できるというルールです。同じパッケージが複数のモジュールに含まれると、以下のようなコンパイルエラーが発生します。

Error:(1, 1) java: package exists in another module:

2)exports <package> to <module>:公開先を特定モジュールに限定する

2つ目の形式を使うと、パッケージの可視性を限られたモジュールのリストに絞り込むことで、モジュールのセキュリティをさらに強化できます。この場合、to句で列挙されたモジュールだけが、そのパッケージ内のクラスにアクセスできます。

例えば、モデルパッケージをGUIモジュールにのみ公開したい場合は、次のように記述します。

module com.tutorialspoint.model {
    exports tp.com.tutorialspoint.model
        to com.tutorialspoint.gui;
}

このようにexports句を使い分けることで、カプセル化を強固にし、意図したモジュール間だけでのAPI共有を実現できます。大規模アプリケーションの保守性とセキュリティ向上のために、ぜひ活用してみてください。

  1. JavaのsetBounds()メソッドとは?使い方とサンプルコードを解説

    JavaのGUIプログラミングでは、レイアウトマネージャー(Layout Manager)がコンポーネントの位置やサイズを自動的に決定します。しかし、レイアウトマネージャーを使用しない場合は、コンポーネントの位置とサイズを手動で設定する必要があります。そのような場面で活躍するのがsetBounds()メソッドです。フレームのレイアウトマネージャーをnullに設定することで、コンポーネントの位置とサイズを自由に指定できるようになります。setBounds()メソッドの基本setBounds()メソッドは4つの引数を取ります。第1引数と第2引数はコンポーネントの左上隅のx座標・y座標、第3引数はコ

  2. Pythonの「モジュール」と「パッケージ」の違いとは?初心者向けにわかりやすく解説

    モジュールとパッケージの基本的な違いPythonでは、任意の .py ファイルはすべてモジュールとして扱われます。モジュール名は、拡張子 .py を除いたファイル名そのものであり、モジュール内部では __name__ 属性として参照できます。一方、パッケージとは複数のPythonモジュールをまとめたものです。具体的には、モジュール群が格納されたディレクトリに __init__.py ファイルが配置されているものを指します。この __init__.py の存在こそが、単なる「Pythonスクリプトの入ったフォルダ」と「パッケージ」を区別する目印となります。また、各階層のディレクトリにそれぞれ _