Module java.compiler

Package javax.lang.model.element


package javax.lang.model.element
用于模拟Java编程语言元素的接口。在此包中,“元素”一词用于指代程序元素,即构成程序的声明实体。元素包括类、接口、方法、构造函数和字段。此包中的接口不模拟方法体内程序的结构;例如,没有表示for循环或try-finally块。但是,这些接口可以模拟一些仅出现在方法体内的结构,如局部变量和匿名类。

在注解处理的上下文中使用时,必须返回所表示元素的准确模型。由于这是一个语言模型,源代码提供了所讨论构造的基准(参考)表示,而不是类文件等可执行输出中的表示。可执行输出可能用作创建建模元素的基础。然而,将源代码转换为可执行输出的过程可能无法恢复源代码表示的某些方面。例如,具有source retention的注解无法从类文件中恢复,类文件可能无法提供源位置信息。无法从类文件中恢复参数的名称。从类文件创建的元素上的修饰符在某些情况下可能与从源文件创建的相同声明的元素不同,包括:

  • 类或接口上的strictfp
  • 参数上的final
  • 类和接口上的protectedprivatestatic
从类文件创建的一些被强制的元素在创建时可能未被标记为强制。此外,类文件中的合成结构,例如用于实现嵌套类的访问器方法和用于实现协变返回的桥接方法,严格地位于此模型之外的翻译工件。但是,在操作类文件时,有助于能够操作这些元素,在适当时将其筛选出来。

在注解处理期间,操作不完整或错误的程序是必要的;但是,关于生成模型的性质,没有太多的保证。如果源代码在语法上不完整或具有其他无法通过生成新类或接口来消除的错误,可能会或可能不会提供模型作为实现质量问题。如果类或接口的程序在语法上有效但在其他方面存在错误,任何返回的模型必须至少不会比如果程序中的所有方法体都被替换为"throw new RuntimeException();"时的信息少。如果程序引用缺失的类或接口Xyz,则返回的模型必须包含的信息至少不会比假定类或接口Xyz的声明为"class Xyz {}""interface Xyz {}""enum Xyz {}""@interface Xyz {}" "record Xyz {}"时的信息少。如果程序引用缺失的类或接口Xyz<K1, ... ,Kn>,则返回的模型必须包含的信息至少不会比假定Xyz的声明为"class Xyz<T1, ... ,Tn> {}""interface Xyz<T1, ... ,Tn> {}"时的信息少。

除非在特定实现中另有规定,此包中方法返回的集合应该被调用者视为不可修改且不安全以供并发访问。

除非另有规定,此包中的方法在给定null参数时将抛出NullPointerException

参见Java语言规范
6.1 声明
7.4 包声明
7.7 模块声明
8.1 类声明
8.3 字段声明
8.4 方法声明
8.5 成员类和接口声明
8.8 构造函数声明
9.1 接口声明
自版本:
1.6
另请参见: