- 所有实现的接口:
-
AnnotatedElement
named 或未命名的。
命名模块具有一个 name,当向Java虚拟机定义模块图以创建一个 module layer 时,Java虚拟机会构造这些模块。
未命名模块没有名称。每个 ClassLoader 都有一个未命名模块,通过调用其 getUnnamedModule 方法获得。所有不在命名模块中的类型都是其定义类加载器的未命名模块的成员。
在此类中定义的方法中作为参数或返回的包名称是在《Java语言规范》第 6.5.3 节中定义的包的全限定名称,例如,"java.lang"。
除非另有说明,在此类中的方法中将 null 参数传递会导致抛出 NullPointerException。
- 参见 Java语言规范:
-
7.7 模块声明
- 自版本:
- 9
- 另请参阅:
-
Method Summary
Modifier and TypeMethodDescriptionaddExports(String pn, Module other) 如果调用者的模块是此模块,则更新此模块以将给定包导出到给定模块。如果此模块已向至少调用者模块 opened 一个包,则更新此模块以将该包对给定模块 opened。如果调用者的模块是此模块,则更新此模块以读取给定模块。如果调用者的模块是此模块,则更新此模块以在给定服务类型上添加服务依赖关系。boolean指示此模块是否读取给定模块。boolean指示此模块是否对给定服务类型有服务依赖关系。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass) 如果存在指定类型的注解,则返回此元素的注解,否则返回 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()返回此模块的字符串表示形式。Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods declared in interface java.lang.reflect.AnnotatedElement
getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
-
Method Details
-
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。- 返回:
-
如果此模块可以访问 restricted 方法,则返回
true。 - 自版本:
- 20
-
canRead
指示此模块是否读取给定模块。如果调用此方法以测试此模块是否读取自身,则此方法返回true。如果在未命名模块上调用此方法(因为未命名模块读取所有模块),它也会返回true。- 参数:
-
other- 其他模块 - 返回:
-
如果此模块读取
other,则返回true - 另请参阅:
-
addReads
如果调用者的模块是此模块,则更新此模块以读取给定模块。如果other是此模块(所有模块都读取自身)、此模块是未命名模块(因为未命名模块读取所有模块)或此模块已经读取other,则此方法不执行任何操作。- 实现说明:
-
此方法添加的 Read edges 是 weak 的,当此模块是强引用时不会阻止
other被GC回收。 - 参数:
-
other- 其他模块 - 返回:
- 此模块
- 抛出:
-
IllegalCallerException- 如果此为命名模块且调用者模块不是此模块 - 另请参阅:
-
isExported
返回true如果此模块至少向给定模块导出给定包。此方法返回true如果调用以测试此模块中的包是否导出给自身。当在未命名模块上调用此方法时,它总是返回true。在运行时,对给定模块 opened 的包被视为导出给该模块,因此如果包对给定模块 opened,则此方法返回true。- 参数:
-
pn- 包名称 -
other- 其他模块 - 返回:
-
如果此模块至少向给定模块导出该包,则返回
true - 另请参阅:
-
isOpen
返回true如果此模块至少向给定模块 opened 一个包。此方法返回true如果调用以测试此模块中的包是否对自身 opened。在具有包的open模块上调用此方法时,它返回true。在未命名模块上调用此方法时,它总是返回true。 -
isExported
返回true如果此模块无条件导出给定的包。当在未命名模块上调用时,此方法始终返回
true。无条件打开的包在运行时被视为无条件导出,因此如果包被无条件打开,则此方法返回true。此方法不检查给定模块是否读取此模块。
- 参数:
-
pn- 包名 - 返回:
-
如果此模块无条件导出包,则返回
true - 参见:
-
isOpen
返回true如果此模块已无条件开放一个包。当在未命名模块上调用时,此方法始终返回
true。此外,当在一个带有模块中包的开放模块上调用时,它始终返回true。此方法不检查给定模块是否读取此模块。
-
addExports
如果调用者的模块是此模块,则更新此模块以无条件将给定包导出给给定模块。如果包已经导出(或开放)给给定模块,则此方法不起作用。
- API 注释:
- 如《Java虚拟机规范》第5.4.3节所述,如果由于链接错误导致解析符号引用失败,则随后的解析尝试总是以与由于初始解析尝试而抛出的相同错误失败。
- 参数:
-
pn- 包名 -
other- 模块 - 返回:
- 此模块
- 抛出:
-
IllegalArgumentException- 如果pn为null,或者这是一个命名模块且包pn不是此模块中的包 -
IllegalCallerException- 如果这是一个命名模块且调用者的模块不是此模块 - 参见《Java虚拟机规范》:
-
5.4.3 解析
- 参见:
-
addOpens
如果此模块已无条件开放一个包至至少调用者模块,则更新此模块以将包无条件开放给给定模块。使用此方法打开包允许给定模块对包中的所有类型及其所有成员进行反射,而不仅仅是公共类型及其公共成员,当使用支持私有访问或绕过或抑制默认Java语言访问控制检查的API时。如果包已经开放给给定模块,则此方法不起作用。
- API 注释:
- 此方法可用于消费者模块使用限定开放方式向API模块开放包,但消费者模块中类成员的反射访问被委托给另一个模块中的代码的情况。API模块中的代码可以使用此方法将消费者模块中的包开放给另一个模块。
- 参数:
-
pn- 包名 -
other- 模块 - 返回:
- 此模块
- 抛出:
-
IllegalArgumentException- 如果pn为null,或者这是一个命名模块且包pn不是此模块中的包 -
IllegalCallerException- 如果这是一个命名模块且此模块未将包开放至至少调用者模块 - 参见:
-
addUses
如果调用者的模块是此模块,则更新此模块以在给定服务类型上添加服务依赖关系。此方法旨在供调用其他模块的ServiceLoader的框架使用,或者框架被其他代码传递了对服务类型的引用。当在未命名模块或自动模块上调用时,此方法不起作用。此方法不会导致重新运行
resolveAndBind。- 参数:
-
service- 服务类型 - 返回:
- 此模块
- 抛出:
-
IllegalCallerException- 如果这是一个命名模块且调用者的模块不是此模块 - 参见:
-
canUse
指示此模块是否对给定服务类型有服务依赖关系。当在未命名模块或自动模块上调用时,此方法始终返回true。- 参数:
-
service- 服务类型 - 返回:
-
如果此模块使用服务类型
st,则返回true - 参见:
-
getPackages
返回此模块中包的包名集合。对于命名模块,返回的集合包含模块中每个包的元素。
对于未命名模块,返回的集合包含在未命名模块中已经
定义的每个包的元素。- 返回:
- 此模块中包的包名集合
-
getAnnotation
如果存在指定类型的注解,则返回此元素的注解,否则返回null。当在未命名模块上调用时,此方法返回null。请注意,此方法返回的任何注解都是声明注解。
-
在接口
AnnotatedElement中指定: -
getAnnotationin interfaceAnnotatedElement - 类型参数:
-
T- 要查询并返回的注解类型 - 参数:
-
annotationClass- 对应于注解类型的Class对象 - 返回:
- 如果此元素上存在指定注解类型的注解,则返回此元素的指定注解,否则返回null
-
在接口
-
getAnnotations
返回此元素上存在的注解。如果此元素上不存在注解,则返回值为长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。在未命名模块上调用此方法时,将返回一个空数组。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getAnnotations在接口AnnotatedElement中 - 返回:
- 此元素上存在的注解
-
getDeclaredAnnotations
返回此元素上直接存在的注解。此方法忽略继承的注解。如果此元素上直接不存在注解,则返回值为长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。在未命名模块上调用此方法时,将返回一个空数组。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getDeclaredAnnotations在接口AnnotatedElement中 - 返回:
- 此元素上直接存在的注解
-
getResourceAsStream
返回用于读取此模块中资源的输入流。name参数是一个以'/'分隔的路径名,用于标识资源。与Class.getResourceAsStream一样,此方法委托给模块的类加载器findResource(String,String)方法,使用模块名称(或未命名模块时使用null)和资源的名称进行调用。如果资源名称以斜杠开头,则在委托之前将其删除。命名模块中的资源可能会被封装,以使其无法被其他模块的代码找到。资源是否可以被找到取决于以下情况:
- 如果资源名称以"
.class"结尾,则它不会被封装。 - 从资源名称派生出一个包名称。如果包名称是模块中的一个包,则只有当包对调用此方法的调用者至少是开放的模块时,资源才能被此方法的调用者找到。如果资源不在模块的包中,则资源不会被封装。
在上述情况中,资源的包名称是从名称中最后一个
'/'之前的字符子序列派生出来,然后将子序列中的每个'/'字符替换为'.'。在派生包名称时会忽略开头的斜杠。例如,对于名为"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。