- 所有已实现的接口:
Comparable<ModuleDescriptor>
模块描述符描述命名模块并定义获取其每个组件的方法。 Java 虚拟机中命名模块的模块描述符是通过调用 Module 的 getDescriptor 方法获得的。也可以使用 ModuleDescriptor.Builder 类或使用此处定义的 read 方法读取模块声明 (module-info.class) 的二进制形式来创建模块描述符。
模块描述符描述了一个normal、开放或自动模块。 Normal 模块和开放模块描述它们的 依赖性 、 exported-packages 、它们 使用 或 提供 的服务,以及其他组件。 Normal 模块可能 open 特定的包。打开模块的模块描述符不声明任何打开的包(它的opens 方法返回一个空集)但是当在 Java 虚拟机中实例化时,它被视为所有包都打开。自动模块的模块描述符不声明任何依赖(除了对 java.base 的强制依赖),并且不声明任何导出或打开的包。自动模块在解析期间受到特殊处理,以便它们读取配置中的所有其他模块。当一个自动模块在 Java 虚拟机中实例化时,它会读取每个未命名的模块,并被视为所有包都已导出并打开。
ModuleDescriptor 对象是不可变的,可以安全地供多个并发线程使用。
- 自从:
- 9
- 参见:
-
内部类总结
内部类修饰符和类型类描述static final class用于构建ModuleDescriptor对象的构建器。static final class模块导出的包可能是合格的或不合格的。static enum模块上的修饰符。static final class一个模块打开的包,可能是合格的,也可能是不合格的。static final class模块提供一个或多个实现的服务。static final class对模块的依赖。static final class模块的版本字符串。 -
方法总结
修饰符和类型方法描述返回 模块标志 的集合。intcompareTo(ModuleDescriptor that) 将此模块描述符与另一个进行比较。boolean测试此模块描述符是否与给定对象相等。exports()返回代表导出包的Exports对象集。inthashCode()计算此模块描述符的哈希码。boolean如果这是一个自动模块,则返回true。booleanisOpen()如果这是一个打开的模块,则返回true。返回模块主类。返回模块修饰符集。name()返回模块名称。static ModuleDescriptor.BuildernewAutomaticModule(String name) 实例化构建器以构建自动模块的模块描述符。static ModuleDescriptor.Builder实例化构建器以构建 normal 模块的模块描述符。static ModuleDescriptor.BuildernewModule(String name, Set<ModuleDescriptor.Modifier> ms) 实例化构建器以构建模块描述符。static ModuleDescriptor.BuildernewOpenModule(String name) 实例化构建器以构建打开模块的模块描述符。opens()返回表示打开包的Opens对象集。packages()返回模块中的包集。provides()返回表示模块提供的服务的Provides对象集。返回带有可能无法解析的模块版本的字符串。static ModuleDescriptorread(InputStream in) 从输入流中读取模块声明的二进制形式作为模块描述符。static ModuleDescriptorread(InputStream in, Supplier<Set<String>> packageFinder) 从输入流中读取模块声明的二进制形式作为模块描述符。static ModuleDescriptorread(ByteBuffer bb) 从字节缓冲区读取模块声明的二进制形式作为模块描述符。static ModuleDescriptorread(ByteBuffer bb, Supplier<Set<String>> packageFinder) 从字节缓冲区读取模块声明的二进制形式作为模块描述符。requires()返回表示模块依赖关系的一组Requires对象。返回一个包含模块名称和版本(如果存在)的字符串。toString()返回描述模块的字符串。uses()返回服务依赖集。version()返回模块版本。
-
方法详情
-
name
返回模块名称。
- 返回:
- 模块名称
-
modifiers
返回模块修饰符集。
- 返回:
- 一组可能为空的不可修改的修饰符
-
accessFlags
返回 模块标志 的集合。- 返回:
- 一组可能为空的不可修改的模块标志
- 看Java 虚拟机规范:
-
4.7.25 模块属性
- 自从:
- 20
- 参见:
-
isOpen
public boolean isOpen()- 返回:
true如果这是一个开放模块
-
isAutomatic
public boolean isAutomatic()- 返回:
true如果这是一个自动模块
-
requires
返回表示模块依赖关系的一组
Requires对象。当此模块未命名为“
java.base”时,该集合包括对“java.base”的依赖。如果此模块是自动模块,则它不依赖于“java.base”以外的任何模块。- 返回:
-
一组可能为空的不可修改的
ModuleDescriptor.Requires对象
-
exports
返回代表导出包的
Exports对象集。如果此模块是自动模块,则导出集为空。
- 返回:
- 一组可能为空的不可修改的导出包
-
opens
返回表示打开包的
Opens对象集。如果此模块是开放模块或自动模块,则开放包集为空。
- 返回:
- 一组可能为空的不可修改的开放包
-
uses
返回服务依赖集。
如果此模块是自动模块,则服务依赖集为空。
- 返回:
- 所用服务类型的完全限定类名的可能为空的不可修改集
-
provides
返回表示模块提供的服务的
Provides对象集。- 返回:
- 该模块提供的可能为空的不可修改的服务集
-
version
返回模块版本。
- 返回:
-
此模块的版本,如果模块没有版本或版本为不可解析的,则为空
Optional
-
rawVersion
返回带有可能无法解析的模块版本的字符串。
- 返回:
-
包含模块版本的字符串,如果模块没有版本,则为空
Optional - 参见:
-
toNameAndVersion
返回一个包含模块名称和版本(如果存在)的字符串。
- 返回:
- 包含模块名称和版本(如果存在)的字符串
-
mainClass
返回模块主类。
- 返回:
- 模块主类的完全限定类名
-
packages
返回模块中的包集。包集包括所有导出和打开的包,以及任何服务提供者的包和主类的包。
- 返回:
- 模块中一组可能为空的不可修改的包
-
compareTo
将此模块描述符与另一个进行比较。两个
ModuleDescriptor对象通过按字典顺序比较它们的模块名称来进行比较。如果模块名称相同,则比较模块版本。当比较模块版本时,带有版本的模块描述符被认为接替没有版本的模块描述符。如果两个版本都是 不可解析的,则按字典顺序比较 原始版本字符串。如果模块名称相同且版本相同(或两者都不存在),则比较修饰符集。通过比较为每个集合计算的 binary value 来比较修饰符集合。如果集合中存在修饰符,则其序号位置的位在二进制值中为1,否则为0。如果两组修饰符也相等,则以与equals一致的方式比较模块描述符的其他组件。- 指定者:
compareTo在接口Comparable<ModuleDescriptor>中- 参数:
that- 要比较的模块描述符- 返回:
- 如果此模块描述符小于、等于或大于给定的模块描述符,则为负整数、零或正整数
-
equals
测试此模块描述符是否与给定对象相等。如果给定对象不是
ModuleDescriptor,则此方法返回false。如果两个模块描述符的每个相应组件都相等,则它们是相等的。此方法满足
Object.equals方法的一般契约。 -
hashCode
public int hashCode()计算此模块描述符的哈希码。哈希码基于模块描述符的组件,并满足
Object.hashCode方法的一般契约。 -
toString
返回描述模块的字符串。
-
newModule
实例化构建器以构建模块描述符。- 参数:
name- 模块名称ms- 模块修饰符集- 返回:
- 一个新的建设者
- 抛出:
IllegalArgumentException- 如果模块名称是null或者不是合法的模块名称,或者修饰符集包含AUTOMATIC和其他修饰符
-
newModule
- 参数:
name- 模块名称- 返回:
- 一个新的建设者
- 抛出:
IllegalArgumentException- 如果模块名称是null或者不是合法的模块名称
-
newOpenModule
- 参数:
name- 模块名称- 返回:
- 构建开放模块的新构建器
- 抛出:
IllegalArgumentException- 如果模块名称是null或者不是合法的模块名称
-
newAutomaticModule
- 参数:
name- 模块名称- 返回:
- 构建自动模块的新构建器
- 抛出:
IllegalArgumentException- 如果模块名称是null或者不是合法的模块名称- 参见:
-
read
public static ModuleDescriptor read(InputStream in, Supplier <Set <String >> packageFinder) throws IOException 从输入流中读取模块声明的二进制形式作为模块描述符。如果输入流中编码的描述符不指示模块中的一组包,则将调用
packageFinder。packageFinder返回的包集合必须包括模块导出、打开的所有包,以及模块提供的服务实现的包,以及主类的包(如果模块有主类) .如果packageFinder抛出UncheckedIOException,则IOException原因将被重新抛出。如果模块描述符后面有字节,那么这些字节是被读取、忽略还是报告为
InvalidModuleDescriptorException是实现特定的。如果此方法因InvalidModuleDescriptorException或IOException而失败,则它可能会在从输入流中读取一些但不是全部字节后执行此操作。强烈建议在出现异常时及时关闭并丢弃该流。- API 注意:
packageFinder参数用于从未在描述符本身中记录包集的遗留模块工件格式读取模块描述符。- 参数:
in- 输入流packageFinder- 可以生产套件的供应商- 返回:
- 模块描述符
- 抛出:
InvalidModuleDescriptorException- 如果检测到无效的模块描述符或packageFinder返回的包集不包括从模块描述符获得的所有包IOException- 如果从输入流读取时发生 I/O 错误,或者包查找器抛出UncheckedIOException
-
read
从输入流中读取模块声明的二进制形式作为模块描述符。此方法完全按照 2-argread方法指定的方式工作,但当从流中读取的模块描述符未指示包集时,包查找器不用于查找其他包。- 参数:
in- 输入流- 返回:
- 模块描述符
- 抛出:
InvalidModuleDescriptorException- 如果检测到无效的模块描述符IOException- 如果从输入流读取时发生 I/O 错误
-
read
从字节缓冲区读取模块声明的二进制形式作为模块描述符。如果字节缓冲区中编码的描述符不指示模块中的一组包,则将调用
packageFinder。packageFinder返回的包集合必须包括模块导出、打开的所有包,以及模块提供的服务实现的包,以及主类的包(如果模块有主类) .如果packageFinder抛出UncheckedIOException,则IOException原因将被重新抛出。从索引
p开始的缓冲区中读取模块描述符,其中p是调用此方法时缓冲区的position。返回时,缓冲区的位置将等于p + n,其中n是从缓冲区读取的字节数。如果模块描述符后面有字节,那么这些字节是被读取、忽略还是报告为
InvalidModuleDescriptorException是实现特定的。如果此方法因InvalidModuleDescriptorException而失败,则它可能会在读取了一些(但不是全部)字节后执行此操作。- API 注意:
packageFinder参数用于从未在描述符本身中记录包集的遗留模块工件格式读取模块描述符。- 参数:
bb- 字节缓冲区packageFinder- 可以生产套件的供应商- 返回:
- 模块描述符
- 抛出:
InvalidModuleDescriptorException- 如果检测到无效的模块描述符或packageFinder返回的包集不包括从模块描述符获得的所有包
-
read
从字节缓冲区读取模块声明的二进制形式作为模块描述符。此方法完全按照 2-argread方法指定的方式工作,但当缓冲区中编码的模块描述符未指示包集时,包查找器不用于查找其他包。- 参数:
bb- 字节缓冲区- 返回:
- 模块描述符
- 抛出:
InvalidModuleDescriptorException- 如果检测到无效的模块描述符
-