モジュール java.base
パッケージ java.lang

クラス・モジュール

  • すべての実装されたインタフェース:
    AnnotatedElement

    public final class Module
    extends Object
    implements AnnotatedElement
    ランタイム・モジュール(namedまたは名前なし)を表します。

    名前付きモジュールにはnameがあり、モジュール・レイヤーを作成するためにモジュールのグラフがJava仮想マシンに定義されるときに、Java Virtual Machineによって構築されます。

    名前のないモジュールには名前がありません。 ClassLoaderには名前のないモジュールがあり、getUnnamedModuleメソッドを呼び出して取得します。 名前付きモジュールにない型はすべて、定義クラス・ローダーの名前なしモジュールのメンバーです。

    このクラスで定義されるパラメータまたはメソッドによって返されるパッケージ名は、The Java™Language Specificationの6.5.3項で定義されているパッケージの完全修飾名("java.lang"など)です。

    特に指定がないかぎり、このクラスのメソッドにnull引数を渡すと、NullPointerExceptionがスローされます。

    導入されたバージョン:
    9
    関連項目:
    Class.getModule()
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 具象メソッド 
      修飾子と型 メソッド 説明
      Module addExports​(String pn, Module other)
      呼出し側のモジュールがこのモジュールである場合は、このモジュールを更新して、指定されたパッケージを指定のモジュールにエクスポートします。
      Module addOpens​(String pn, Module other)
      このモジュールが少なくとも呼出し元モジュールにパッケージをオープンしている場合は、このモジュールを更新して、指定されたモジュールにパッケージをオープンします。
      Module addReads​(Module other)
      呼出し側のモジュールがこのモジュールである場合は、指定されたモジュールを読み取るようにこのモジュールを更新します。
      Module addUses​(Class<?> service)
      呼出し側のモジュールがこのモジュールである場合は、このモジュールを更新して、指定されたサービス・タイプへのサービス依存を追加します。
      boolean canRead​(Module other)
      このモジュールが指定されたモジュールを読み取るかどうかを示します。
      boolean canUse​(Class<?> service)
      このモジュールに、指定されたサービス・タイプへのサービス依存があるかどうかを示します。
      <T extends Annotation>
      T
      getAnnotation​(Class<T> annotationClass)
      存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。
      Annotation[] getAnnotations()
      この要素に存在する注釈を返します。
      ClassLoader getClassLoader()
      このモジュールのClassLoaderを返します。
      Annotation[] getDeclaredAnnotations()
      この要素に直接存在する注釈を返します。
      ModuleDescriptor getDescriptor()
      このモジュールのモジュール記述子を返します。このモジュールが名前のないモジュールの場合は、nullを返します。
      ModuleLayer getLayer()
      このモジュールを含むモジュール・レイヤーを返します。このモジュールがモジュール・レイヤーにない場合は、nullを返します。
      String getName()
      モジュール名を返すか、このモジュールが名前のないモジュールである場合はnullを返します。
      Set<String> getPackages()
      このモジュール内のパッケージのパッケージ名のセットを返します。
      InputStream getResourceAsStream​(String name)
      このモジュール内のリソースを読み取るための入力ストリームを返します。
      boolean isExported​(String pn)
      このモジュールが指定されたパッケージを無条件にエクスポートする場合、trueを返します。
      boolean isExported​(String pn, Module other)
      このモジュールが指定されたパッケージを少なくとも指定されたモジュールにエクスポートする場合、trueを返します。
      boolean isNamed()
      このモジュールが名前付きモジュールの場合、trueを返します。
      boolean isOpen​(String pn)
      このモジュールが無条件にパッケージをオープンした場合、trueを返します。
      boolean isOpen​(String pn, Module other)
      このモジュールが指定されたモジュールに対してパッケージをオープンした場合、trueを返します。
      String toString()
      このモジュールの文字列表現を返します。
    • メソッドの詳細

      • isNamed

        public boolean isNamed()
        このモジュールが名前付きモジュールの場合、trueを返します。
        戻り値:
        これが名前付きモジュールの場合はtrue
        関連項目:
        ClassLoader.getUnnamedModule()
      • getName

        public String getName()
        モジュール名を返すか、このモジュールが名前のないモジュールである場合はnullを返します。
        戻り値:
        モジュール名
      • getClassLoader

        public ClassLoader getClassLoader()
        このモジュールのClassLoaderを返します。

        セキュリティ・マネージャが存在する場合、そのcheckPermissionメソッドは、コール元がクラス・ローダーへのアクセスを許可されていることを確認するRuntimePermission("getClassLoader")権限で最初にコールされた場合です。

        戻り値:
        このモジュールのクラス・ローダー
        例外:
        SecurityException - セキュリティ・マネージャによって拒否された場合
      • getDescriptor

        public ModuleDescriptor getDescriptor()
        このモジュールのモジュール記述子を返します。このモジュールが名前のないモジュールの場合は、nullを返します。
        戻り値:
        このモジュールのモジュール記述子
      • getLayer

        public ModuleLayer getLayer()
        このモジュールを含むモジュール・レイヤーを返します。このモジュールがモジュール・レイヤーにない場合は、nullを返します。 モジュール・レイヤーには名前付きモジュールが含まれているため、このメソッドは、名前なしモジュールで呼び出されると常にnullを返します。

        動的モジュールは、実行時に生成される名前付きモジュールです。 動的モジュールは、モジュール・レイヤーにある場合とない場合があります。

        戻り値:
        このモジュールを含むモジュール・レイヤー
        関連項目:
        Proxy
      • canRead

        public boolean canRead​(Module other)
        このモジュールが指定されたモジュールを読み取るかどうかを示します。 このメソッドは、このモジュールが自身を読み取るかどうかをテストするために呼び出されると、trueを返します。 また、名前のないモジュールで呼び出された場合(名前のないモジュールがすべてのモジュールを読み取るため)、trueを返します。
        パラメータ:
        other - もう一方のモジュール
        戻り値:
        このモジュールがotherを読み取る場合はtrue
        関連項目:
        addReads(Module)
      • addReads

        public Module addReads​(Module other)
        呼出し側のモジュールがこのモジュールである場合は、指定されたモジュールを読み取るようにこのモジュールを更新します。 otherがこのモジュール(すべてのモジュールが自身を読み取る)、このモジュールが(名前のないモジュールがすべてのモジュールを読み取るように)名前のないモジュールである場合、またはこのモジュールがすでにotherを読み取る場合、このメソッドはno-opです。
        実装上のノート:
        このメソッドによって追加された読取りエッジ弱いため、このモジュールに強く到達可能な場合、otherがGCされるのを防ぎません。
        パラメータ:
        other - もう一方のモジュール
        戻り値:
        このモジュール
        例外:
        IllegalCallerException - これが名前付きモジュールで、呼出し側のモジュールがこのモジュールではない場合
        関連項目:
        canRead(java.lang.Module)
      • isExported

        public boolean isExported​(String pn,
                                  Module other)
        このモジュールが指定されたパッケージを少なくとも指定されたモジュールにエクスポートする場合、trueを返します。

        このメソッドは、このモジュール内のパッケージがそれ自体にエクスポートされるかどうかをテストするために呼び出された場合、trueを返します。 名前のないモジュールで呼び出されると、常にtrueが返されます。 指定されたモジュールに対するopenのパッケージは、実行時にそのモジュールにエクスポートされたとみなされるため、指定されたモジュールに対してパッケージが開いている場合、このメソッドはtrueを返します。

        このメソッドは、指定されたモジュールがこのモジュールを読み取るかどうかをチェックしません。

        パラメータ:
        pn - パッケージ名
        other - もう一方のモジュール
        戻り値:
        このモジュールがパッケージを少なくとも指定されたモジュールにエクスポートする場合はtrue
        関連項目:
        ModuleDescriptor.exports(), addExports(String,Module)
      • isOpen

        public boolean isOpen​(String pn,
                              Module other)
        このモジュールが指定されたモジュールに対してパッケージをオープンした場合、trueを返します。

        このメソッドは、このモジュール内のパッケージがそれ自体にオープンされているかどうかをテストするために呼び出されると、trueを返します。 モジュール内のパッケージを含むopenモジュールで呼び出されると、trueが返されます。 名前のないモジュールで呼び出されると、常にtrueが返されます。

        このメソッドは、指定されたモジュールがこのモジュールを読み取るかどうかをチェックしません。

        パラメータ:
        pn - パッケージ名
        other - もう一方のモジュール
        戻り値:
        このモジュールが指定されたモジュールに対してパッケージをオープンした場合、true
        関連項目:
        ModuleDescriptor.opens(), addOpens(String,Module), AccessibleObject.setAccessible(boolean), MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
      • isExported

        public boolean isExported​(String pn)
        このモジュールが指定されたパッケージを無条件にエクスポートする場合、trueを返します。

        このメソッドは、名前のないモジュールで呼び出されると、常にtrueを返します。 無条件にopenedのパッケージは、実行時に無条件にエクスポートされたとみなされるため、このメソッドは、パッケージが無条件にオープンされた場合にtrueを返します。

        このメソッドは、指定されたモジュールがこのモジュールを読み取るかどうかをチェックしません。

        パラメータ:
        pn - パッケージ名
        戻り値:
        このモジュールがパッケージを無条件にエクスポートする場合はtrue
        関連項目:
        ModuleDescriptor.exports()
      • isOpen

        public boolean isOpen​(String pn)
        このモジュールが無条件にパッケージをオープンした場合、trueを返します。

        このメソッドは、名前のないモジュールで呼び出されると、常にtrueを返します。 また、モジュール内のパッケージを含むopenモジュールで呼び出されると、常にtrueが返されます。

        このメソッドは、指定されたモジュールがこのモジュールを読み取るかどうかをチェックしません。

        パラメータ:
        pn - パッケージ名
        戻り値:
        このモジュールが無条件にパッケージをオープンした場合、true
        関連項目:
        ModuleDescriptor.opens()
      • addExports

        public Module addExports​(String pn,
                                 Module other)
        呼出し側のモジュールがこのモジュールである場合は、このモジュールを更新して、指定されたパッケージを指定のモジュールにエクスポートします。

        このメソッドは、パッケージが指定されたモジュールにすでにエクスポート(または open)されている場合には効果がありません。

        APIのノート:
        The Java™Virtual Machine Specification のセクション5.4.3で規定されているように、リンケージエラーのためにシンボリック参照を解決しようとすると失敗した場合、そのあとの参照の解決の試みは、最初の解決の試みの結果としてスローされたものと同じエラーで常に失敗します。
        パラメータ:
        pn - パッケージ名
        other - モジュール
        戻り値:
        このモジュール
        例外:
        IllegalArgumentException - pnnullの場合、またはこれが名前付きモジュールで、パッケージpnがこのモジュール内のパッケージではない場合
        IllegalCallerException - これが名前付きモジュールで、呼出し側のモジュールがこのモジュールではない場合
        関連項目:
        isExported(String,Module)
        The Java™Virtual Machine Specificationを参照してください。
        5.4.3 解決方法
      • addOpens

        public Module addOpens​(String pn,
                               Module other)
        このモジュールが少なくとも呼出し元モジュールにパッケージをオープンしている場合は、このモジュールを更新して、指定されたモジュールにパッケージをオープンします。 このメソッドでパッケージを開くと、プライベート・アクセスをサポートするAPIまたはデフォルトのJava言語アクセス制御チェックをバイパスまたは抑制する方法を使用するときに、パッケージ内のすべてのタイプ、およびパブリック・タイプとそのパブリック・メンバーのみでなく、そのすべてのメンバーが特定のモジュールに反映されます。

        このメソッドは、パッケージが指定されたモジュールに対してすでに openされている場合には効果がありません。

        APIのノート:
        このメソッドは、コンシューマ・モジュールが修飾オープンを使用してパッケージをAPIモジュールにオープンし、コンシューマ・モジュール内のクラスのメンバーへの反射的アクセスが別のモジュールのコードに委任される場合に使用できます。 APIモジュールのコードは、このメソッドを使用してコンシューマ・モジュールのパッケージを他のモジュールに開くことができます。
        パラメータ:
        pn - パッケージ名
        other - モジュール
        戻り値:
        このモジュール
        例外:
        IllegalArgumentException - pnnullの場合、またはこれが名前付きモジュールで、パッケージpnがこのモジュール内のパッケージではない場合
        IllegalCallerException - これが名前付きモジュールで、このモジュールが少なくとも呼出し側のモジュールに対してパッケージを開いていない場合
        関連項目:
        isOpen(String,Module), AccessibleObject.setAccessible(boolean), MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
      • addUses

        public Module addUses​(Class<?> service)
        呼出し側のモジュールがこのモジュールである場合は、このモジュールを更新して、指定されたサービス・タイプへのサービス依存を追加します。 このメソッドは、他のモジュールのかわりにServiceLoaderを起動するフレームワーク、または他のコードによってフレームワークがサービス・タイプへの参照を渡すフレームワークで使用することを目的としています。 このメソッドは、名前のないモジュールまたは自動モジュールで呼び出された場合、no-opです。

        このメソッドでは、resolveAndBindは再実行されません。

        パラメータ:
        service - サービス・タイプ
        戻り値:
        このモジュール
        例外:
        IllegalCallerException - これが名前付きモジュールで、呼出し側のモジュールがこのモジュールではない場合
        関連項目:
        canUse(Class), ModuleDescriptor.uses()
      • canUse

        public boolean canUse​(Class<?> service)
        このモジュールに、指定されたサービス・タイプへのサービス依存があるかどうかを示します。 このメソッドは、名前のないモジュールまたは自動モジュールで呼び出されると、常にtrueを返します。
        パラメータ:
        service - サービス・タイプ
        戻り値:
        このモジュールがサービス・タイプstを使用する場合、true
        関連項目:
        addUses(Class)
      • getPackages

        public Set<String> getPackages()
        このモジュール内のパッケージのパッケージ名のセットを返します。

        名前付きモジュールの場合、返されるセットには、モジュール内の各パッケージの要素が含まれます。

        名前のないモジュールの場合、このメソッドは、このモジュールのクラス・ローダーのgetDefinedPackagesメソッドを起動し、パッケージ名のセットを返すことと同等です。

        戻り値:
        このモジュール内のパッケージのパッケージ名のセット
      • getAnnotation

        public <T extends Annotation> T getAnnotation​(Class<T> annotationClass)
        存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。 このメソッドは、名前のないモジュールで呼び出されたときにnullを返します。
        定義:
        getAnnotation、インタフェースAnnotatedElement
        型パラメータ:
        T - 照会し、存在する場合に返す注釈の型。
        パラメータ:
        annotationClass - 注釈型に対応するClassオブジェクト
        戻り値:
        存在する場合は、この要素の指定された注釈型の注釈。そうでない場合はnull
      • getAnnotations

        public Annotation[] getAnnotations()
        この要素に存在する注釈を返します。 この要素に存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。 このメソッドは、名前のないモジュールで呼び出されたときに空の配列を返します。
        定義:
        getAnnotations、インタフェースAnnotatedElement
        戻り値:
        この要素に存在する注釈
      • getDeclaredAnnotations

        public Annotation[] getDeclaredAnnotations()
        この要素に直接存在する注釈を返します。 このメソッドは継承された注釈を無視します。 この要素に直接存在する注釈がない場合、戻り値は長さ0の配列です。 このメソッドの呼出し元は、返された配列を自由に変更することができ、これはほかの呼出し元に返された配列に影響を及ぼしません。 このメソッドは、名前のないモジュールで呼び出されたときに空の配列を返します。
        定義:
        getDeclaredAnnotations、インタフェースAnnotatedElement
        戻り値:
        この要素に直接存在する注釈
      • getResourceAsStream

        public InputStream getResourceAsStream​(String name)
                                        throws IOException
        このモジュール内のリソースを読み取るための入力ストリームを返します。 nameパラメータは、リソースを識別する'/'区切りのパス名です。 Class.getResourceAsStreamと同様に、このメソッドはモジュールのクラス・ローダーのfindResource(String,String)メソッドに委譲し、モジュール名(モジュール名がない場合はnull)およびリソース名でメソッドを呼び出します。 リソース名に先頭のスラッシュがある場合は、委任前に削除されます。

        名前付きモジュール内のリソースは、カプセル化して、ほかのモジュールのコードで見つけられないようにすることができます。 リソースを特定できるかどうかは、次のように決定されます。

        • リソース名が".class"で終わる場合、そのリソース名はカプセル化されません。
        • パッケージ名は、リソース名から導出されます。 パッケージ名がモジュール内のパッケージである場合、少なくとも呼び出し元のモジュールに対してパッケージがオープンになっているときにのみ、このメソッドの呼び出し元がリソースを検索できます。 リソースがモジュール内のパッケージ内にない場合、そのリソースはカプセル化されません。

        前述のリソースのパッケージ名は、名前の最後の'/'に先行する文字のサブシーケンスから導出されてから、サブシーケンス内の各'/'文字を'.'に置き換えます。 パッケージ名を導出する場合、先頭のスラッシュは無視されます。 たとえば、"a/b/c/foo.properties"という名前のリソースに対して導出されたパッケージ名は"a.b.c"です。 "META-INF"は有効なパッケージ名ではないため、"META-INF/MANIFEST.MF"という名前のリソース名はカプセル化されません。

        このメソッドは、リソースがこのモジュールにない場合、リソースがカプセル化され、呼出し側が見つけられない場合、またはリソースへのアクセスがセキュリティ・マネージャによって拒否された場合、nullを返します。

        パラメータ:
        name - リソース名
        戻り値:
        リソースまたはnullを読み取るための入力ストリーム
        例外:
        IOException - 入出力エラーが発生した場合
        関連項目:
        Class.getResourceAsStream(String)
      • toString

        public String toString()
        このモジュールの文字列表現を返します。 名前付きモジュールの場合、表現は文字列"module"の後にスペース、モジュール名が続きます。 名前のないモジュールの場合、表現は文字列"unnamed module"の後にスペース、および名前のないモジュールを識別する実装固有の文字列です。
        オーバーライド:
        toString、クラスObject
        戻り値:
        このモジュールの文字列表現