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

Java 9の名前のないモジュール(Unnamed Module)とは?仕組みと使い方を解説

Java 9で導入されたモジュールシステム(Project Jigsaw)において、名前のないモジュール(unnamed module)無名パッケージの概念に対応する重要な仕組みです。これは、どの名前付きモジュールにも定義されていないパッケージやクラスが、クラスパス上のJARファイルから読み込まれる際に所属するモジュールです。コードがこれらのファイルから型を読み込もうとすると、モジュールシステムは自動的にクラスパスを検索し、該当するクラスをロードします。

名前のないモジュールには、以下のような特徴があります。

  • 他のすべてのモジュール(名前付きモジュールや組み込みプラットフォームモジュールを含む)を読み取ることができる
  • 自身のすべてのパッケージをエクスポートする

また、名前のないモジュール内のパッケージが、名前付きモジュールでも同じ名前で定義されている場合、そのパッケージは無視されます。

名前のないモジュールがアクセスできるもの

  • モジュールパス上にあるすべてのモジュールがエクスポートしているすべてのパッケージ
  • クラスパス上のすべてのJARファイル(つまり、この名前のないモジュールに存在する他のすべての型)

構文

java --module-path out -module moduleName/com.tutorialspoint.UnnamedModuleTest

サンプルコード

次の例では、Module APIを使って、実行中のクラスが属するモジュールの情報を取得しています。

public class UnnamedModuleTest {
    public static void main(String args[]) {
        Module module = UnnamedModuleTest.class.getModule();
        System.out.println("Module: "+ module);
        System.out.println("Name: " + module.getName());
        System.out.println("isNamed: " + module.isNamed());
        System.out.println("Descriptor: " + module.getDescriptor());
    }
}

実行結果

Module: unnamed module @c818063
Name: null
isNamed: false
Descriptor: null

実行結果からわかるように、クラスパスから実行されたクラスは名前のないモジュールに属し、getName()getDescriptor()nullを返し、isNamed()falseを返します。これは、モジュール記述子(module-info.java)を持たないためです。

  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

  2. JavaのArrayIndexOutOfBoundsExceptionとは?発生原因と対処法を解説

    配列とインデックスの基本 配列(Array)とは、同じ型の要素を固定サイズで順番に格納するためのデータ構造(コンテナ/オブジェクト)です。配列のサイズ(長さ)は生成時に決定され、後から変更することはできません。 配列内の各要素の位置は「インデックス(添字)」と呼ばれます。Javaの配列は0始まりのため、最初の要素はインデックス0、2番目の要素はインデックス1、というように順に番号が割り当てられます。 配列の各要素へは、「配列名[インデックス]」という形式の式を使ってアクセスします。 System.out.println(myArray[3]); // 1457 が出力される たとえばサイズ7