- java.lang.Object
-
- java.lang.module.ModuleDescriptor
-
- All Implemented Interfaces:
-
Comparable<ModuleDescriptor>
public class ModuleDescriptor extends Object implements Comparable<ModuleDescriptor>
模块描述符。模块描述符描述了一个命名模块,并定义了获取每个组件的方法。 Java虚拟机中命名模块的模块描述符是通过调用
Module
的getDescriptor
方法获得的。 也可以使用ModuleDescriptor.Builder
类创建模块描述符,或者使用这里定义的read
方法读取模块声明的二进制形式(module-info.class
)。模块描述符描述一个正常的 ,开放的或自动的模块。 普通模块和开放式模块描述他们
dependences
,exported-packages
,服务他们use
或者provide
,和其他组件。 正常模块可能是open
具体包。 开放模块的模块描述符不声明任何打开的软件包(其opens
方法返回一个空集合),但是在Java虚拟机中实例化时,将被视为打开所有软件包。 自动模块的模块描述符不声明任何依赖关系(除了对java.base
的强制依赖性),也不声明任何导出或打开的包。 自动模块在分辨率期间接收特殊处理,以便它们读取配置中的所有其他模块。 当在Java虚拟机中实例化自动模块时,它会读取每个未命名的模块,并将其视为导出并打开所有软件包。ModuleDescriptor
对象是不可变的,安全的可供多个并发线程使用。- 从以下版本开始:
- 9
- 另请参见:
-
Module
-
-
Nested Class Summary
Nested Classes Modifier and Type Class 描述 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
模块的版本字符串。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 int
compareTo(ModuleDescriptor that)
将此模块描述符与其他描述符进行比较boolean
equals(Object ob)
测试此模块描述符与给定对象的相等性。Set<ModuleDescriptor.Exports>
exports()
返回表示导出的包的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>
packages()
返回模块中的一组包。Set<ModuleDescriptor.Provides>
provides()
返回表示模块提供的服务的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
个对象
-
exports
public Set<ModuleDescriptor.Exports> exports()
返回表示导出的包的
Exports
对象的集合。如果此模块是自动模块,则导出集合为空。
- 结果
- 可能是空的不可修改的一组导出的包
-
opens
public Set<ModuleDescriptor.Opens> opens()
返回表示开放包的
Opens
对象集。如果此模块是开放模块或自动模块,则该组开放软件包为空。
- 结果
- 一个可能是空的不可修改的开放包的集合
-
provides
public Set<ModuleDescriptor.Provides> provides()
返回表示模块提供的服务的
Provides
对象的集合。- 结果
- 该模块提供的可能为空的不可修改的服务集
-
version
public Optional<ModuleDescriptor.Version> version()
返回模块版本。
- 结果
-
该模块的版本,或空的
Optional
如果模块没有版本或版本是 unparseable
-
rawVersion
public Optional<String> rawVersion()
返回具有可能不可粗体版本的模块的字符串
- 结果
-
包含模块版本的字符串或空的
Optional
如果模块没有版本 - 另请参见:
-
version()
-
toNameAndVersion
public String toNameAndVersion()
返回一个包含模块名称的字符串,如果存在,则显示其版本。
- 结果
- 包含模块名称的字符串,如果存在,则为其版本
-
packages
public Set<String> packages()
返回模块中的一组包。该套组包括所有导出和打开的包,以及任何服务提供者的包,以及主类的包。
- 结果
- 模块中可能为空的不可修改的包的集合
-
compareTo
public int compareTo(ModuleDescriptor that)
将此模块描述符与其他描述符进行比较比较两个
ModuleDescriptor
对象,比较它们的模块名称。 如果模块名称相等,则比较模块版本。 当比较模块版本时,具有版本的模块描述符被认为是使没有版本的模块描述符成功。 如果两个版本都是unparseable,那么raw version strings在字典上被比较。 如果模块名称相等并且版本相等(或两者都不存在),则比较一组修饰符。 通过比较为每个集合计算的二进制值来比较一组修饰符。 如果改性剂是存在于所述组,然后在它的顺序的位置的位是1
二进制值,否则0
。 如果两组修饰符也相等,则与equals
一致的方式比较模块描述符的其他组件。- Specified by:
-
compareTo
在接口Comparable<ModuleDescriptor>
- 参数
-
that
- 要比较的模块描述符 - 结果
- 如果该模块描述符小于,等于或大于给定的模块描述符,则为负整数,零或正整数
-
equals
public boolean equals(Object ob)
测试此模块描述符与给定对象的相等性。如果给定的对象不是一个
ModuleDescriptor
那么这个方法返回false
。 如果两个模块描述符的每个相应的组件相等,则相等。该方法满足
Object.equals
方法的一般合同。- 重写:
-
equals
在类Object
- 参数
-
ob
- 要比较此对象的对象 - 结果
-
true
如果并且只有给定的对象是等于该模块描述符的模块描述符 - 另请参见:
-
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
必须包括模块导出的所有包,打开,以及模块提供的服务实现的包以及主类的包(如果该模块有一个主类) 。 如果packageFinder
抛出一个UncheckedIOException
,那么IOException
的原因会被重新抛出。如果在模块描述符之后有字节,那么这个字节是否被读取,忽略或报告为
InvalidModuleDescriptorException
是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
方法所指定的不同,当从流读取的模块描述符未显示该包的集合时,不使用packager finder来查找其他包。- 参数
-
in
- 输入流 - 结果
- 模块描述符
- 异常
-
InvalidModuleDescriptorException
- 如果检测到无效的模块描述符 -
IOException
- 如果从输入流读取I / O错误
-
read
public static ModuleDescriptor read(ByteBuffer bb, Supplier<Set<String>> packageFinder)
从字节缓冲区中读取模块声明的二进制形式作为模块描述符。如果在字节缓冲区中编码的描述符不表示模块中的一组包,那么将调用
packageFinder
。packageFinder
返回的包的packageFinder
必须包括模块导出的所有包,打开,以及模块提供的服务实现的包以及主类的包(如果该模块有一个主类) 。 如果packageFinder
抛出一个UncheckedIOException
,那么IOException
的原因会被重新抛出。从缓冲区读取模块描述符,说明索引号为
p
,其中当调用此方法时,p
是缓冲区的position
。 一旦返回缓冲区的位置将等于p + n
,其中n
是从缓冲区读取的字节数。如果模块描述符后面有字节,那么这个字节是否被读取,忽略或报告为
InvalidModuleDescriptorException
是InvalidModuleDescriptorException
。 如果这个方法失败了一个InvalidModuleDescriptorException
那么它可能会在一些但不是全部的字节被读取之后这样做。- API Note:
-
当从传统的模块 - 工件格式读取模块描述符时,不会在描述符本身中记录一组程序包时使用
packageFinder
参数。 - 参数
-
bb
- 字节缓冲区 -
packageFinder
- 可以生产该套装的供应商 - 结果
- 模块描述符
- 异常
-
InvalidModuleDescriptorException
- 如果检测到无效的模块描述符,或由packageFinder
返回的包的packageFinder
不包括从模块描述符获得的所有软件包
-
read
public static ModuleDescriptor read(ByteBuffer bb)
从字节缓冲区中读取模块声明的二进制形式作为模块描述符。 该方法的工作原理与2-argread
方法所指定的相同,但是当缓冲区中编码的模块描述符不表示包的集合时,不使用packager finder来查找其他包。- 参数
-
bb
- 字节缓冲区 - 结果
- 模块描述符
- 异常
-
InvalidModuleDescriptorException
- 如果检测到无效的模块描述符
-
-