- 所有已实现的接口:
AnnotatedElement
named 或未命名。
命名模块有一个 name 并且在为 Java 虚拟机定义模块图以创建 模块层 时由 Java 虚拟机构建。
未命名的模块没有名称。每个 ClassLoader 都有一个未命名的模块,通过调用其 getUnnamedModule 方法获得。不在命名模块中的所有类型都是其定义类加载器的未命名模块的成员。
作为参数或由此类中定义的方法返回的包名称是在 6.5.3 节中定义的包的完全限定名称Java 语言规范,例如 "java.lang" 。
除非另有说明,否则将 null 参数传递给此类中的方法会导致抛出 NullPointerException 。
- 看Java 语言规范:
-
7.7 模块声明
- 自从:
- 9
- 参见:
-
方法总结
修饰符和类型方法描述addExports(String pn, Module other) 如果调用者的模块是此模块,则更新此模块以将给定的包导出到给定的模块。如果此模块至少包含 opened 调用程序模块的包,则更新此模块以打开给定模块的包。如果调用者的模块是这个模块,那么更新这个模块以读取给定的模块。如果调用者的模块是此模块,则更新此模块以添加对给定服务类型的服务依赖。boolean指示此模块是否读取给定模块。boolean指示此模块是否具有对给定服务类型的服务依赖性。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass) 如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。返回此元素上的 present 注释。返回此模块的ClassLoader。返回此元素上的 directly present 注释。返回此模块的模块描述符,如果此模块是未命名模块,则返回null。getLayer()返回包含此模块的模块层,如果此模块不在模块层中,则返回null。getName()如果此模块是未命名模块,则返回模块名称或null。返回此模块中包的包名称集。getResourceAsStream(String name) 返回用于读取此模块中资源的输入流。booleanisExported(String pn) 如果此模块无条件导出给定包,则返回true。booleanisExported(String pn, Module other) 如果此模块至少将给定包导出到给定模块,则返回true。booleanisNamed()如果此模块是命名模块,则返回true。boolean预览。如果此模块可以访问 restricted 方法,则返回true。boolean如果此模块无条件地具有 opened 包,则返回true。boolean如果此模块有 opened 至少给定模块的包,则返回true。toString()返回此模块的字符串表示形式。在类 java.lang.Object 中声明的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait在接口 java.lang.reflect.AnnotatedElement 中声明的方法
getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
-
方法详情
-
isNamed
public boolean isNamed()如果此模块是命名模块,则返回true。- 返回:
true如果这是一个命名模块- 看Java 语言规范:
-
7.7.5 未命名模块
- 参见:
-
getName
如果此模块是未命名模块,则返回模块名称或null。- 返回:
- 模块名称
-
getClassLoader
返回此模块的ClassLoader。如果有一个安全管理器,那么它的
checkPermission方法如果首先以RuntimePermission("getClassLoader")权限调用,以检查是否允许调用者访问类加载器。- 返回:
- 该模块的类加载器
- 抛出:
SecurityException- 如果安全经理拒绝
-
getDescriptor
返回此模块的模块描述符,如果此模块是未命名模块,则返回null。- 返回:
- 该模块的模块描述符
-
getLayer
返回包含此模块的模块层,如果此模块不在模块层中,则返回null。模块层包含命名模块,因此在未命名模块上调用时,此方法始终返回null。动态模块 是在运行时生成的命名模块。动态模块可能在也可能不在模块层中。
- 返回:
- 包含该模块的模块层
- 参见:
-
isNativeAccessEnabled
public boolean isNativeAccessEnabled()isNativeAccessEnabled是 Java 平台的预览 API。预览功能可能会在未来的版本中删除,或升级为 Java 平台的永久功能。如果此模块可以访问 restricted 方法,则返回true。- 返回:
true如果此模块可以访问 restricted 方法。- 自从:
- 20
-
canRead
指示此模块是否读取给定模块。如果调用此方法来测试此模块是否读取自身,则此方法返回true。如果在未命名模块上调用它也会返回true(因为未命名模块读取所有模块)。- 参数:
other- 另一个模块- 返回:
true如果此模块读取other- 参见:
-
addReads
如果调用者的模块是这个模块,那么更新这个模块以读取给定的模块。如果other是这个模块(所有模块自己读取)、这个模块是一个未命名的模块(因为未命名模块读取所有模块),或者这个模块已经读取了other,则此方法是空操作。- 实现注意事项:
-
通过此方法添加的 Read edges 是 weak,并且当此模块可强访问时,不会阻止
other被 GC。 - 参数:
other- 另一个模块- 返回:
- 这个模块
- 抛出:
IllegalCallerException- 如果这是一个命名模块并且调用者的模块不是这个模块- 参见:
-
isExported
如果此模块至少将给定包导出到给定模块,则返回true。如果调用此方法来测试此模块中的包是否导出到自身,则此方法返回
true。在未命名模块上调用时,它总是返回true。open到给定模块的包被视为在运行时导出到该模块,因此如果包对给定模块开放,则此方法返回true。此方法不检查给定模块是否读取此模块。
- 参数:
pn- 包名other- 另一个模块- 返回:
true如果此模块至少将包导出到给定模块- 参见:
-
isOpen
如果此模块有 opened 至少给定模块的包,则返回true。如果调用此方法来测试此模块中的包是否对自身开放,则此方法返回
true。当在模块中包含包的open模块上调用时,它返回true。在未命名模块上调用时,它总是返回true。此方法不检查给定模块是否读取此模块。
- 参数:
pn- 包名other- 另一个模块- 返回:
true如果此模块具有 opened 至少给定模块的包- 参见:
-
isExported
如果此模块无条件导出给定包,则返回true。在未命名模块上调用时,此方法始终返回
true。无条件为opened的包被视为在运行时无条件导出,因此如果无条件打开包,则此方法返回true。此方法不检查给定模块是否读取此模块。
- 参数:
pn- 包名- 返回:
true如果此模块无条件导出包- 参见:
-
isOpen
如果此模块无条件地具有 opened 包,则返回true。在未命名模块上调用时,此方法始终返回
true。此外,当在模块中有包的open模块上调用时,它总是返回true。此方法不检查给定模块是否读取此模块。
- 参数:
pn- 包名- 返回:
true如果此模块无条件地具有 opened 包- 参见:
-
addExports
如果调用者的模块是此模块,则更新此模块以将给定的包导出到给定的模块。如果包已经导出(或 open )到给定模块,则此方法无效。
- API 注意:
- 如第 5.4.3 节所述Java 虚拟机规范,如果尝试解析符号引用由于链接错误而失败,则后续解析引用的尝试总是会失败,并出现与初始解析尝试相同的错误。
- 参数:
pn- 包名other- 模块- 返回:
- 这个模块
- 抛出:
IllegalArgumentException- 如果pn是null,或者这是一个命名模块并且包pn不是该模块中的包IllegalCallerException- 如果这是一个命名模块并且调用者的模块不是这个模块- 看Java 虚拟机规范:
-
5.4.3 分辨率
- 参见:
-
addOpens
如果此模块至少包含 opened 调用程序模块的包,则更新此模块以打开给定模块的包。使用此方法打开包允许包中的所有类型及其所有成员,而不仅仅是公共类型及其公共成员,在使用支持私有访问的 API 或绕过或抑制默认值的方法时由给定模块反映Java 语言访问控制检查。如果包已经 open 到给定模块,则此方法无效。
- API 注意:
- 此方法可用于以下情况:consumer module 使用限定 opens 打开包到 API module,但对使用者模块中类成员的反射访问被委托给另一个模块中的代码。 API 模块中的代码可以使用此方法将消费者模块中的包打开给其他模块。
- 参数:
pn- 包名other- 模块- 返回:
- 这个模块
- 抛出:
IllegalArgumentException- 如果pn是null,或者这是一个命名模块并且包pn不是该模块中的包IllegalCallerException- 如果这是一个命名模块,并且这个模块至少没有打开调用者模块的包- 参见:
-
addUses
如果调用者的模块是此模块,则更新此模块以添加对给定服务类型的服务依赖。此方法旨在供代表其他模块调用ServiceLoader的框架使用,或者由其他代码向框架传递对服务类型的引用。在未命名模块或自动模块上调用时,此方法是空操作。此方法不会导致
resolveAndBind重新运行。- 参数:
service- 服务类型- 返回:
- 这个模块
- 抛出:
IllegalCallerException- 如果这是一个命名模块并且调用者的模块不是这个模块- 参见:
-
canUse
指示此模块是否具有对给定服务类型的服务依赖性。在未命名模块或自动模块上调用时,此方法始终返回true。- 参数:
service- 服务类型- 返回:
true如果此模块使用服务类型st- 参见:
-
getPackages
返回此模块中包的包名称集。对于命名模块,返回的集合包含模块中每个包的一个元素。
对于未命名模块,返回的集合包含未命名模块中
has been defined的每个包的元素。- 返回:
- 此模块中包的包名称集
-
getAnnotation
如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。在未命名模块上调用时,此方法返回null。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
getAnnotation在接口AnnotatedElement中- 类型参数:
T- 要查询并返回的注释类型(如果存在)- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果此元素上存在此元素的指定注解类型的注解,则为 null
-
getAnnotations
返回此元素上的 present 注释。如果该元素上没有注解present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。在未命名模块上调用时,此方法返回一个空数组。请注意,此方法返回的任何注释都是声明注解。
- 指定者:
getAnnotations在接口AnnotatedElement中- 返回:
- 此元素上的注释
-
getDeclaredAnnotations
返回此元素上的 directly present 注释。此方法忽略继承的注释。如果该元素上没有注解directly present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。在未命名模块上调用时,此方法返回一个空数组。请注意,此方法返回的任何注释都是声明注解。
- 指定者:
getDeclaredAnnotations在接口AnnotatedElement中- 返回:
- 注释直接出现在这个元素上
-
getResourceAsStream
返回用于读取此模块中资源的输入流。name参数是一个'/'分隔的路径名,用于标识资源。与Class.getResourceAsStream一样,此方法委托给模块的类加载器findResource(String,String)方法,使用模块名称(或null当模块未命名时)和资源名称调用它。如果资源名称有前导斜杠,则在委托之前将其删除。命名模块中的资源可能是 encapsulated,因此其他模块中的代码无法定位它。资源是否可以被定位的判断方式如下:
- 如果资源名称以“
.class”结尾,那么它不会被封装。 - package name 派生自资源名称。如果模块中的包名称是 包,则只有当包至少是调用者模块的 open 时,此方法的调用者才能定位资源。如果资源不在模块的包中,则资源不被封装。
在上面,资源的 package name 来自名称中最后一个
'/'之前的字符子序列,然后用'.'替换子序列中的每个'/'字符。派生包名称时忽略前导斜杠。例如,为名为“a/b/c/foo.properties”的资源派生的包名称是“a.b.c”。名称为“META-INF/MANIFEST.MF”的资源名称永远不会被封装,因为“META-INF”不是合法的包名称。该方法返回
null如果资源不在这个模块中,资源被封装并且不能被调用者定位,或者访问资源被安全管理器拒绝。- 参数:
name- 资源名称- 返回:
-
用于读取资源或
null的输入流 - 抛出:
IOException- 如果发生 I/O 错误- 参见:
- 如果资源名称以“
-
toString
返回此模块的字符串表示形式。对于命名模块,表示形式是字符串"module",后跟一个空格,然后是模块名称。对于未命名模块,表示形式是字符串"unnamed module",后跟一个空格,然后是标识未命名模块的特定于实现的字符串。
-
isNativeAccessEnabled。