ホームページ  >  記事  >  Java  >  Java9の新機能モジュール モジュラープログラミング方式

Java9の新機能モジュール モジュラープログラミング方式

王林
王林転載
2023-05-19 13:51:16875ブラウズ

Java 言語は、バージョン 9 で重要な概念であるモジュールを導入しました。 JavaScript コードのモジュール管理に慣れている場合は、Java 9 のモジュール管理を見ると親しみを感じるはずです。

1. Java モジュールとは何ですか?

モジュールは、Java のパッケージと同様に、より高いレベルの Java コード グループ化を導入します。このような各グループ (モジュール) には、多くのサブパッケージが含まれています。ファイル module-info.java をモジュールのソース コード ファイル パッケージのルートに追加して、フォルダーとそのサブフォルダーをモジュールとして宣言します。ファイルの構文は次のとおりです。

 module xxx.yyy{
  ....
 }

ここで、xxx.yyy はパッケージ名ではなく、モジュール module によって宣言された名前です。

2. モジュール エクスポート パッケージ

ファイル module-info.java は、モジュール内のどのパッケージが外部から表示され、アクセスできるかを指定できます。この機能は、新しいキーワード exports によって実装されます。

 module xxx.yyy{
  exports com.zimug.java9;
 }

com.zimug.java9 はパッケージを表します。

指定されたパッケージ内のクラスがパブリックであっても、そのパッケージが「エクスポート」を通じて明示的にエクスポートされない場合、それらはモジュールの外部には表示されないことに注意してください (これは、両方の場合に当てはまります)コンパイル時と実行時)。

3. モジュールのインポート パッケージ

別のモジュールがエクスポートされたパッケージ内のクラスを使用したい場合は、その module -info で requires キーワードを使用できます。 .java ファイルを使用して、対象モジュールのパッケージ package をインポート (読み取り) します。

module def.stu{ requires xxx.yyy;}

4. Java モジュールの重要性

著者は、Java 9 でのモジュール モジュール管理システムの導入は主にセキュリティ上の考慮事項によるものであると考えています。 Java コードの脆弱性の 90% 以上は、リフレクションと不十分なアクセス制御粒度によって引き起こされますが、Java 9 のモジュラー システムはこの問題を解決します。 Java 9 のモジュール性により、Java コードのより高いレベルの可視性とアクセシビリティ制御が提供されます。

例として、クラスをプライベートとしてマークすると、それは内部クラスであることを意味します。外部クラスの修飾子は public とdefault の 2 つだけです。これには問題もあり、当初は jar パッケージで定義された範囲内でいくつかのパブリック クラスを使用する予定でしたが、その結果、この jar を導入するプロジェクトはすべて、この jar 内のパブリック クラス コードをすべて使用できるようになりました。

つまり、当初の意図は限られた範囲内でパブリックアクセスを提供することでしたが、結果的には無制限のパブリックアクセスになりました。 Java 9 モジュール化の導入後、限定された範囲のコードのパブリック アクセス権が実現され、コードの公開は次の モジュール外の限定された範囲のパブリック アクセスおよび##に分割されます。 #モジュール内パブリックアクセス

5. 例

この例では、2 つのモジュール「common.widget」と「data.widget」を作成し、それらを 1 つのフォルダー「modules-examples /src」に配置します。ファイル「module-info.java」は、各モジュールのルート フォルダーの下に配置されます。

ファイルとディレクトリの形式は次のとおりです:

D:\modules-example>tree /F /A
\---src
    +---common.widget
    |   |   module-info.java
    |   |   
    |   +---com
    |   |   \---zimug
    |   |           RendererSupport.java
    |   |           
    |   \---org
    |       \---jwidgets
    |               SimpleRenderer.java
    |               
    \---data.widget
        |   module-info.java
        |   
        \---com
            \---example
                    Component.java

最初のモジュール

このコード ファイル ディレクトリ:

modules-example/src/common。ウィジェット/org/jwidgets/SimpleRenderer.java。

このパッケージは、次のテキストではエクスポートされません。

package org.jwidgets;
public class SimpleRenderer {
  public void renderAsString(Object object) {
      System.out.println(object);
  }
}

このコード ファイル ディレクトリ:

modules-example/src/common.widget/com/zimug/RendererSupport.java。

このパッケージは後でエクスポートされます。

package com.zimug;
import org.jwidgets.SimpleRenderer;
public class RendererSupport {
  public void render(Object object) {
      new SimpleRenderer().renderAsString(object);
  }
}

モジュールのエクスポート、このコード ファイル ディレクトリ: modules-example/src/common.widget/module-info.java。

com.zimug パッケージのみがエクスポートされ、org.jwidgets パッケージはエクスポートされません。エクスポートされたモジュール名は common.widget

module common.widget{
  exports com.zimug;
}

です。2 番目のモジュール

module は

common.widget をインポートします。このコード ファイル ディレクトリは次のとおりです。 modules-example /src/data.widget/module-info.java

module data.widget {
  requires common.widget;
}

インポートされたモジュール

common.widget 内の package:com.zimug を使用します。このコード ファイル パス:

modules-example/src/data.widget/com/example/Component.java

package com.example;
import com.zimug.RendererSupport;
public class Component {
  public static void main(String[] args) {
      RendererSupport support = new RendererSupport();
      support.render("Test Object");
  }
}
通常どおりコンパイルして実行すると、結果は次のようになります。

Test Object

エクスポートされていないパッケージ コードを使用しようとしています

パッケージ "org.jwidgets" が "common.widget" モジュールによってエクスポートされていないため、別のモジュール "data.ウィジェット」では、パッケージ クラス

SimpleRenderer を使用できません。何が起こるかを確認するために反例を作成してみましょう:

package com.example;
import org.jwidgets.SimpleRenderer;
public class Component {
  public static void main(String[] args) {
    SimpleRenderer simpleRenderer = new SimpleRenderer(); 
    simpleRenderer.renderAsString("Test Object");
  }
}

コンパイル エラー メッセージは次のとおりです:

D:\modules-example\src\data.widget\com\example\Component.java:3: error: package org.jwidgets is not visible
import org.jwidgets.SimpleRenderer;         ^
  (package org.jwidgets is declared in module common.widget, which does not export it)
1 error

public として宣言されていても、エクスポートされていないパッケージの下のクラスにはアクセスできません。

以上がJava9の新機能モジュール モジュラープログラミング方式の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。