模块  java.base
软件包  java.lang.module

Class ModuleDescriptor

  • 实现的所有接口
    Comparable<ModuleDescriptor>

    public class ModuleDescriptor
    extends Object
    implements Comparable<ModuleDescriptor>
    模块描述符。

    模块描述符描述命名模块并定义获取其每个组件的方法。 通过调用模块getDescriptor方法获得Java虚拟机中命名模块的模块描述符。 模块描述符也可以使用ModuleDescriptor.Builder类创建,或者使用此处定义的read方法读取模块声明的二进制形式( module-info.class )。

    模块描述符描述正常 ,开放或自动模块。 普通模块和开放式模块描述他们dependencesexported-packages ,服务他们useprovide ,和其他组件。 普通模块可能是open特定的包。 开放模块的模块描述符不声明任何打开的包(它的opens方法返回一个空集),但是当在Java虚拟机中实例化时,它被视为所有包都打开。 自动模块的模块描述符不声明任何依赖(除了对java.base的强制依赖),并且不声明任何导出或打开的包。 自动模块在分辨率期间接受特殊处理,以便它们读取配置中的所有其他模块。 当在Java虚拟机中实例化自动模块时,它会读取每个未命名的模块,并将其视为导出和打开所有包。

    ModuleDescriptor对象是不可变的,并且可供多个并发线程使用。

    从以下版本开始:
    9
    另请参见:
    模块
    • 方法详细信息

      • name

        public String name()

        返回模块名称。

        结果
        模块名称
      • modifiers

        public Set<ModuleDescriptor.Modifier> modifiers()

        返回模块修饰符集。

        结果
        可能为空的不可修改的修饰符集
      • isOpen

        public boolean isOpen()

        如果这是一个打开的模块,则返回true

        此方法等效于测试modifiers的集合是否包含OPEN修饰符。

        结果
        true如果这是一个开放模块
      • isAutomatic

        public boolean isAutomatic()

        如果这是一个自动模块,则返回true

        如果modifiers的集合包含AUTOMATIC修饰符,则此方法等效于测试。

        结果
        true如果这是一个自动模块
      • requires

        public Set<ModuleDescriptor.Requires> requires()

        返回表示模块依赖关系的Requires对象的集合。

        当该模块未命名为“ java.base ”时,该组包括对“ java.base ”的依赖性。 如果此模块是自动模块,则它不依赖于“ java.base ”以外的任何模块。

        结果
        可能为空的不可修改的ModuleDescriptor.Requires对象集
      • 输出

        public Set<ModuleDescriptor.Exports> exports()

        返回表示导出的包的输出对象的集合。

        如果此模块是自动模块,则导出集为空。

        结果
        可能为空的不可修改的导出包集
      • opens

        public Set<ModuleDescriptor.Opens> opens()

        返回表示打开包的Opens对象的集合。

        如果此模块是打开模块或自动模块,则打开的包的集合为空。

        结果
        一个可能为空的不可修改的开放包
      • uses

        public Set<String> uses()

        返回服务依赖集。

        如果此模块是自动模块,那么服务依赖集是空的。

        结果
        可能为空的不可修改的一组使用的服务类型的完全限定类名
      • 提供者

        public Set<ModuleDescriptor.Provides> provides()

        返回表示模块提供的服务的提供者对象的集合。

        结果
        此模块提供的可能为空的不可修改的服务集
      • rawVersion

        public Optional<String> rawVersion()

        返回具有可能不可解析的模块版本的字符串

        结果
        包含模块版本的字符串,如果模块没有版本, OptionalOptional
        另请参见:
        version()
      • toNameAndVersion

        public String toNameAndVersion()

        返回包含模块名称的字符串,如果存在,则返回其版本。

        结果
        包含模块名称的字符串,如果存在,则包含其版本
      • mainClass

        public Optional<String> mainClass()

        返回模块主类。

        结果
        模块主类的完全限定类名
      • public Set<String> packages()
        返回模块中的包集。

        这组包包括所有导出和打开的包,以及任何服务提供者的包和主类的包。

        结果
        模块中可能为空的不可修改的包集
      • compareTo

        public int compareTo​(ModuleDescriptor that)
        将此模块描述符与另一个进行比较。

        通过按字典顺序比较它们的模块名称来比较两个ModuleDescriptor对象。 在模块名称相等的情况下,比较模块版本。 在比较模块版本时,具有版本的模块描述符被认为是接替没有版本的模块描述符。 如果两个版本都是unparseable,那么raw version strings将按字典顺序进行比较。 如果模块名称相同且版本相同(或两者中不存在),则比较修改器集。 通过比较为每组计算的二进制值来比较修改器组。 如果集合中存在修饰符,则其序号位置的位在二进制值中为1 ,否则为0 如果两组修饰符也相等, equalsequals一致的方式比较模块描述符的其他组件。

        Specified by:
        compareTo在界面 Comparable<ModuleDescriptor>
        参数
        that - 要比较的模块描述符
        结果
        如果此模块描述符小于,等于或大于给定模块描述符,则为负整数,零或正整数
      • equals

        public boolean equals​(Object ob)
        测试此模块描述符与给定对象的相等性。

        如果给定对象不是ModuleDescriptor则此方法返回false 如果它们的每个相应组件相等,则两个模块描述符相等。

        该方法满足Object.equals方法的一般合同。

        重写:
        equals在类 Object
        参数
        ob - 要与此对象进行比较的对象
        结果
        true if且仅当给定对象是等于此模块描述符的模块描述符时
        另请参见:
        Object.hashCode()HashMap
      • toString

        public String toString()

        返回描述模块的字符串。

        重写:
        toString在类 Object
        结果
        描述模块的字符串
      • newOpenModule

        public static ModuleDescriptor.Builder newOpenModule​(String name)
        实例化构建器以为打开的模块构建模块描述符。 此方法等效于使用OPEN修饰符调用newModule

        打开模块的构建器不能用于声明任何打开的包。

        参数
        name - 模块名称
        结果
        构建开放模块的新构建器
        异常
        IllegalArgumentException - 如果模块名称为 null或者不是合法的模块名称
      • newAutomaticModule

        public static ModuleDescriptor.Builder newAutomaticModule​(String name)
        实例化构建器以构建自动模块的模块描述符。 此方法等效于使用AUTOMATIC修饰符调用newModule

        自动模块的构建器不能用于声明模块或服务依赖性。 它也不能用于声明任何导出或打开的包。

        参数
        name - 模块名称
        结果
        构建自动模块的新构建器
        异常
        IllegalArgumentException - 如果模块名称为 null或不是合法的模块名称
        另请参见:
        ModuleFinder.of(Path[])
      • read

        public static ModuleDescriptor read​(InputStream in,
                                            Supplier<Set<String>> packageFinder)
                                     throws IOException
        从输入流中读取模块声明的二进制形式作为模块描述符。

        如果输入流中编码的描述符未指示模块中的一组包,则将调用packageFinder packageFinder返回的软件包集必须包括模块导出,打开的所有软件包,以及模块提供的服务实现的软件包,以及主类的软件包(如果模块具有主类) 。 如果packageFinder抛出UncheckedIOException则会重新抛出IOException因果。

        如果模块描述符后面有字节,那么它是否是特定于实现的,这些字节是读取,忽略还是报告为InvalidModuleDescriptorException 如果此方法因InvalidModuleDescriptorExceptionIOException失败,则可能在从输入流中读取了一些(但不是全部)字节后执行此操作。 强烈建议在发生异常时立即关闭并丢弃流。

        API Note:
        packageFinder参数用于从旧模块工件格式读取模块描述符时,这些格式不记录描述符本身中的包集。
        参数
        in - 输入流
        packageFinder - 可以生成一组包的供应商
        结果
        模块描述符
        异常
        InvalidModuleDescriptorException - 如果检测到无效的模块描述符或 packageFinder返回的包集不包含从模块描述符获取的所有包
        IOException - 如果从输入流读取I / O错误或包装查找器抛出 UncheckedIOException
      • read

        public static ModuleDescriptor read​(InputStream in)
                                     throws IOException
        从输入流中读取模块声明的二进制形式作为模块描述符。 此方法完全按照2-arg read方法的指定工作,但当从流中读取的模块描述符未指示包集时,不使用打包程序查找程序查找其他程序包。
        参数
        in - 输入流
        结果
        模块描述符
        异常
        InvalidModuleDescriptorException - 如果检测到无效的模块描述符
        IOException - 如果从输入流中读取I / O错误
      • read

        public static ModuleDescriptor read​(ByteBuffer bb,
                                            Supplier<Set<String>> packageFinder)
        从字节缓冲区中读取模块声明的二进制形式作为模块描述符。

        如果在字节缓冲区中编码的描述符不指示模块中的一组包,则将调用packageFinder packageFinder返回的软件包集必须包括模块导出,打开的所有软件包,以及模块提供的服务实现的软件包,以及主类的软件包(如果模块具有主类) 。 如果packageFinder抛出UncheckedIOException则会重新抛出IOException原因。

        从索引p开始从缓冲区读取模块描述符,其中p是调用此方法时的缓冲区position 返回时,缓冲区的位置将等于p + n ,其中n是从缓冲区读取的字节数。

        如果模块描述符后面有字节,那么它是否是特定于实现的,这些字节是读取,忽略还是报告为InvalidModuleDescriptorException 如果此方法使用InvalidModuleDescriptorException失败,则可能在读取了一些但不是全部字节后执行此操作。

        API Note:
        packageFinder参数用于从旧模块工件格式读取模块描述符时,这些格式不记录描述符本身中的包集。
        参数
        bb - 字节缓冲区
        packageFinder - 可以生产一组包裹的供应商
        结果
        模块描述符
        异常
        InvalidModuleDescriptorException - 如果检测到无效的模块描述符,或者 packageFinder返回的包的 packageFinder不包括从模块描述符获取的所有包
      • read

        public static ModuleDescriptor read​(ByteBuffer bb)
        从字节缓冲区中读取模块声明的二进制形式作为模块描述符。 此方法完全按照2-arg read方法的指定工作,但在缓冲区中编码的模块描述符未指示包集时,不使用packager finder查找其他包。
        参数
        bb - 字节缓冲区
        结果
        模块描述符
        异常
        InvalidModuleDescriptorException - 如果检测到无效的模块描述符