- java.lang.Object
-
- java.lang.module.ModuleDescriptor
-
- 实现的所有接口
-
Comparable<ModuleDescriptor>
public class ModuleDescriptor extends Object implements Comparable<ModuleDescriptor>
模块描述符。模块描述符描述命名模块并定义获取其每个组件的方法。 通过调用
模块
的getDescriptor
方法获得Java虚拟机中命名模块的模块描述符。 模块描述符也可以使用ModuleDescriptor.Builder
类创建,或者使用此处定义的read
方法读取模块声明的二进制形式(module-info.class
)。模块描述符描述正常 ,开放或自动模块。 普通模块和开放式模块描述他们
dependences
,exported-packages
,服务他们use
或provide
,和其他组件。 普通模块可能是open
特定的包。 开放模块的模块描述符不声明任何打开的包(它的opens
方法返回一个空集),但是当在Java虚拟机中实例化时,它被视为所有包都打开。 自动模块的模块描述符不声明任何依赖(除了对java.base
的强制依赖),并且不声明任何导出或打开的包。 自动模块在分辨率期间接受特殊处理,以便它们读取配置中的所有其他模块。 当在Java虚拟机中实例化自动模块时,它会读取每个未命名的模块,并将其视为导出和打开所有包。ModuleDescriptor
对象是不可变的,并且可供多个并发线程使用。- 从以下版本开始:
- 9
- 另请参见:
-
模块
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static class
ModuleDescriptor.Builder
用于构建ModuleDescriptor
对象的构建器。static class
ModuleDescriptor.Exports
由模块导出的包可能是合格的或不合格的。static class
ModuleDescriptor.Modifier
模块上的修饰符。static class
ModuleDescriptor.Opens
由模块打开的包可能是合格的或不合格的。static class
ModuleDescriptor.Provides
模块提供的一个或多个实现的服务。static class
ModuleDescriptor.Requires
依赖于模块static class
ModuleDescriptor.Version
模块的版本字符串。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 int
compareTo(ModuleDescriptor that)
将此模块描述符与另一个进行比较。boolean
equals(Object ob)
测试此模块描述符与给定对象的相等性。Set<ModuleDescriptor.Exports>
输出()
返回表示导出的包的输出
对象的集合。int
hashCode()
计算此模块描述符的哈希码。boolean
isAutomatic()
如果这是一个自动模块,则返回true
。boolean
isOpen()
如果这是一个打开的模块,则返回true
。Optional<String>
mainClass()
返回模块主类。Set<ModuleDescriptor.Modifier>
modifiers()
返回模块修饰符集。String
name()
返回模块名称。static ModuleDescriptor.Builder
newAutomaticModule(String name)
实例化构建器以构建自动模块的模块描述符。static ModuleDescriptor.Builder
newModule(String name)
实例化构建器以构建 普通模块的模块描述符。static ModuleDescriptor.Builder
newModule(String name, Set<ModuleDescriptor.Modifier> ms)
实例化构建器以构建模块描述符。static ModuleDescriptor.Builder
newOpenModule(String name)
实例化构建器以为打开的模块构建模块描述符。Set<ModuleDescriptor.Opens>
opens()
返回表示打开包的Opens
对象的集合。Set<String>
包()
返回模块中的包集。Set<ModuleDescriptor.Provides>
提供者()
返回表示模块提供的服务的提供者
对象的集合。Optional<String>
rawVersion()
返回具有可能不可解析的模块版本的字符串static ModuleDescriptor
read(InputStream in)
从输入流中读取模块声明的二进制形式作为模块描述符。static ModuleDescriptor
read(InputStream in, Supplier<Set<String>> packageFinder)
从输入流中读取模块声明的二进制形式作为模块描述符。static ModuleDescriptor
read(ByteBuffer bb)
从字节缓冲区中读取模块声明的二进制形式作为模块描述符。static ModuleDescriptor
read(ByteBuffer bb, Supplier<Set<String>> packageFinder)
从字节缓冲区中读取模块声明的二进制形式作为模块描述符。Set<ModuleDescriptor.Requires>
requires()
返回表示模块依赖关系的Requires
对象的集合。String
toNameAndVersion()
返回包含模块名称的字符串,如果存在,则返回其版本。String
toString()
返回描述模块的字符串。Set<String>
uses()
返回服务依赖集。Optional<ModuleDescriptor.Version>
version()
返回模块版本。
-
-
-
方法详细信息
-
name
public String name()
返回模块名称。
- 结果
- 模块名称
-
modifiers
public Set<ModuleDescriptor.Modifier> modifiers()
返回模块修饰符集。
- 结果
- 可能为空的不可修改的修饰符集
-
isOpen
public boolean isOpen()
- 结果
-
true
如果这是一个开放模块
-
isAutomatic
public boolean isAutomatic()
- 结果
-
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
对象的集合。如果此模块是打开模块或自动模块,则打开的包的集合为空。
- 结果
- 一个可能为空的不可修改的开放包
-
提供者
public Set<ModuleDescriptor.Provides> provides()
返回表示模块提供的服务的
提供者
对象的集合。- 结果
- 此模块提供的可能为空的不可修改的服务集
-
version
public Optional<ModuleDescriptor.Version> version()
返回模块版本。
- 结果
-
此模块的版本,如果模块没有版本或版本,
则为空
Optional
为 unparseable
-
rawVersion
public Optional<String> rawVersion()
返回具有可能不可解析的模块版本的字符串
- 结果
-
包含模块版本的字符串,如果模块没有版本,
Optional
空Optional
- 另请参见:
-
version()
-
toNameAndVersion
public String toNameAndVersion()
返回包含模块名称的字符串,如果存在,则返回其版本。
- 结果
- 包含模块名称的字符串,如果存在,则包含其版本
-
compareTo
public int compareTo(ModuleDescriptor that)
将此模块描述符与另一个进行比较。通过按字典顺序比较它们的模块名称来比较两个
ModuleDescriptor
对象。 在模块名称相等的情况下,比较模块版本。 在比较模块版本时,具有版本的模块描述符被认为是接替没有版本的模块描述符。 如果两个版本都是unparseable,那么raw version strings将按字典顺序进行比较。 如果模块名称相同且版本相同(或两者中不存在),则比较修改器集。 通过比较为每组计算的二进制值来比较修改器组。 如果集合中存在修饰符,则其序号位置的位在二进制值中为1
,否则为0
。 如果两组修饰符也相等,equals
与equals
一致的方式比较模块描述符的其他组件。- Specified by:
-
compareTo
在界面Comparable<ModuleDescriptor>
- 参数
-
that
- 要比较的模块描述符 - 结果
- 如果此模块描述符小于,等于或大于给定模块描述符,则为负整数,零或正整数
-
equals
public boolean equals(Object ob)
测试此模块描述符与给定对象的相等性。如果给定对象不是
ModuleDescriptor
则此方法返回false
。 如果它们的每个相应组件相等,则两个模块描述符相等。该方法满足
Object.equals
方法的一般合同。- 重写:
-
equals
在类Object
- 参数
-
ob
- 要与此对象进行比较的对象 - 结果
-
true
if且仅当给定对象是等于此模块描述符的模块描述符时 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
计算此模块描述符的哈希码。哈希码基于模块描述符的组件,并满足
Object.hashCode
方法的常规协定。- 重写:
-
hashCode
在类Object
- 结果
- 此模块描述符的哈希码值
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
newModule
public static ModuleDescriptor.Builder newModule(String name, Set<ModuleDescriptor.Modifier> ms)
实例化构建器以构建模块描述符。- 参数
-
name
- 模块名称 -
ms
- 模块修饰符集 - 结果
- 一个新的建设者
- 异常
-
IllegalArgumentException
- 如果模块名称为null
或者不是合法模块名称,或者修改器集包含AUTOMATIC
和其他修饰符
-
newModule
public static ModuleDescriptor.Builder newModule(String name)
- 参数
-
name
- 模块名称 - 结果
- 一个新的建设者
- 异常
-
IllegalArgumentException
- 如果模块名称为null
或不是合法的模块名称
-
newOpenModule
public static ModuleDescriptor.Builder newOpenModule(String name)
- 参数
-
name
- 模块名称 - 结果
- 构建开放模块的新构建器
- 异常
-
IllegalArgumentException
- 如果模块名称为null
或者不是合法的模块名称
-
newAutomaticModule
public static ModuleDescriptor.Builder newAutomaticModule(String name)
- 参数
-
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
。 如果此方法因InvalidModuleDescriptorException
或IOException
失败,则可能在从输入流中读取了一些(但不是全部)字节后执行此操作。 强烈建议在发生异常时立即关闭并丢弃流。- API Note:
-
packageFinder
参数用于从旧模块工件格式读取模块描述符时,这些格式不记录描述符本身中的包集。 - 参数
-
in
- 输入流 -
packageFinder
- 可以生成一组包的供应商 - 结果
- 模块描述符
- 异常
-
InvalidModuleDescriptorException
- 如果检测到无效的模块描述符或packageFinder
返回的包集不包含从模块描述符获取的所有包 -
IOException
- 如果从输入流读取I / O错误或包装查找器抛出UncheckedIOException
-
read
public static ModuleDescriptor read(InputStream in) throws IOException
从输入流中读取模块声明的二进制形式作为模块描述符。 此方法完全按照2-argread
方法的指定工作,但当从流中读取的模块描述符未指示包集时,不使用打包程序查找程序查找其他程序包。- 参数
-
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-argread
方法的指定工作,但在缓冲区中编码的模块描述符未指示包集时,不使用packager finder查找其他包。- 参数
-
bb
- 字节缓冲区 - 结果
- 模块描述符
- 异常
-
InvalidModuleDescriptorException
- 如果检测到无效的模块描述符
-
-