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

Java 9のmodule-info.javaでrequires句を使う方法を徹底解説

Java 9のモジュールとは

モジュールはJava 9で導入された重要な概念です。この概念を活用することで、コードを「モジュール」と呼ばれる小さなコンポーネントへ分割できます。各モジュールはそれぞれ独自の責務を持ち、正しく動作するために必要な他のモジュールへの依存関係を明示的に宣言します。モジュールを宣言するには、ソースコードのルートディレクトリに「module-info.java」ファイルを配置する必要があります。

requires句の種類

「module-info」ファイルには、用途に応じていくつかの種類の「requires」句が用意されています。

1)requires <module>

デフォルトの状態では、モジュールはモジュールパス上に存在する他のモジュールを認識できません。そのため、別のモジュールにアクセスしたい場合は、その都度module-info.javaに「requires」行を追加する必要があります。

module com.tutorialspoint.gui {
    requires com.tutorialspoint.model;
    requires java.desktop;
}

2)requires transitive <module>

たとえば、自作モジュール「com.tutorialspoint.model」が、別のモジュール「com.core」の公開インターフェース型を返すケースを考えてみましょう。この場合、「com.tutorialspoint.model」を利用しようとするモジュールもまた「com.core」を要求しない限り、コンパイルエラーが発生します。Java 9では「transitive」キーワードを使用することで、この推移的な依存関係を宣言できます。これにより「com.tutorialspoint.model」の利用者は自動的に「com.core」にもアクセス可能となり、実装の変更が容易になります。

module com.tutorialspoint.model {
    requires transitive com.core;
}

3)requires static <module>

requires static」キーワードは、オプション(任意)の依存関係を表します。この指定を行ったモジュールは、次のような特徴を持ちます。

  • コンパイル時には必須:コンパイル時にモジュールパスへ当該モジュールが存在しない場合、コンパイルエラーが発生します。
  • 実行時には任意:アプリケーション起動時の整合性チェック段階では、このモジュールは考慮されません。モジュールが存在しなくてもアプリケーションは正常に起動します。

具体例として、アプリケーションのデータ永続化において、OracleデータベースH2データベースのどちらにも対応させたいケースが挙げられます。

module com.tutorialspoint.model {
    requires static ojdbc;
    requires static com.h2database.h2;
}
  1. JavaのStrictMathクラスとは?主なメソッドと使い方を解説

    java.lang.StrictMathはfinalクラスであり、Objectクラスのサブクラスです。このクラスには、指数関数・対数関数・平方根や三角関数といった初等的な数値演算を実行するためのメソッドが多数含まれています。 StrictMathクラスのすべてのメソッドはstaticメソッド(静的メソッド)として定義されているため、インスタンスを生成する必要はありません。クラス名を直接指定してメソッドを呼び出すだけで利用できます。 主なメソッド一覧 StrictMathクラスでよく使われるメソッドには以下のようなものがあります。 abs():絶対値を返す acos() / asin()

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

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