- 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 classModuleDescriptor.Builder一个建筑物,用于建造ModuleDescriptor个物体。static classModuleDescriptor.Exports由模块导出的包可能有资格或不合格。static classModuleDescriptor.Modifier模块上的修饰符。static classModuleDescriptor.Opens由模块打开的包可能有资格或不合格。static classModuleDescriptor.Provides模块提供一个或多个实现的服务。static classModuleDescriptor.Requires对模块的依赖static classModuleDescriptor.Version模块的版本字符串。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 intcompareTo(ModuleDescriptor that)将此模块描述符与其他描述符进行比较booleanequals(Object ob)测试此模块描述符与给定对象的相等性。Set<ModuleDescriptor.Exports>exports()返回表示导出的包的Exports对象的集合。inthashCode()计算此模块描述符的哈希码。booleanisAutomatic()如果这是自动模块,则返回true。booleanisOpen()如果这是一个开放模块,则返回true。Optional<String>mainClass()返回模块主类。Set<ModuleDescriptor.Modifier>modifiers()返回一组模块修饰符。Stringname()返回模块名称。static ModuleDescriptor.BuildernewAutomaticModule(String name)实例化构建器为自动模块构建模块描述符。static ModuleDescriptor.BuildernewModule(String name)实例化构建器以构建 正常模块的模块描述符。static ModuleDescriptor.BuildernewModule(String name, Set<ModuleDescriptor.Modifier> ms)实例化构建器以构建模块描述符。static ModuleDescriptor.BuildernewOpenModule(String name)实例化构建器为开放模块构建模块描述符。Set<ModuleDescriptor.Opens>opens()返回表示开放包的Opens对象集。Set<String>packages()返回模块中的一组包。Set<ModuleDescriptor.Provides>provides()返回表示模块提供的服务的Provides对象集。Optional<String>rawVersion()返回具有可能不可粗体版本的模块的字符串static ModuleDescriptorread(InputStream in)从输入流读取模块声明的二进制形式作为模块描述符。static ModuleDescriptorread(InputStream in, Supplier<Set<String>> packageFinder)从输入流读取模块声明的二进制形式作为模块描述符。static ModuleDescriptorread(ByteBuffer bb)从字节缓冲区中读取模块声明的二进制形式作为模块描述符。static ModuleDescriptorread(ByteBuffer bb, Supplier<Set<String>> packageFinder)从字节缓冲区中读取模块声明的二进制形式作为模块描述符。Set<ModuleDescriptor.Requires>requires()返回表示模块依赖关系的Requires对象的集合。StringtoNameAndVersion()返回一个包含模块名称的字符串,如果存在,则显示其版本。StringtoString()返回描述模块的字符串。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- 如果检测到无效的模块描述符
-
-