Element
может представлять, начиная с Java 13:
- Объявление модуля -
ModuleElement
- Объявление пакета -
PackageElement
- Интерфейс, класс, перечисление или тип аннотации -
TypeElement
- Конструктор, метод или инициализатор -
ExecutableElement
- Поле, константа перечисления, метод или параметр конструктора, локальная переменная, переменная ресурса или параметр исключения -
VariableElement
- Параметр типа -
TypeParameterElement
Каждый из этих элементов может иметь аннотации. Например:
module-info. java:
@Foobar
module example {
exports com.example;
}
package-info. java:
@Foobaz
package com.example;
Foo. java:
package com.example;
@Baz
public class Foo<@Qux T> {
private final T bar;
public Foo(T bar) {
this.bar = bar;
}
@Override
public String toString() {
return "Foo{bar= " + bar + "}";
}
}
- Модуль
example
, который будет ModuleElement
, имеет аннотацию @Foobar
. - Пакет
com.example
, который будет PackageElement
, содержит @Foobaz
аннотацию. - Класс
Foo
, который будет TypeElement
, имеет @Baz
присутствует аннотация. - Параметр типа
T
, который будет TypeParameterElement
, содержит @Qux
аннотацию. - Поле
bar
, которое будет быть VariableElement
, аннотации отсутствуют. - Конструктор
#Foo(T)
, который будет ExecutableElement
, аннотации отсутствуют. - Параметр конструктора
bar
, который будет VariableElement
, аннотации отсутствуют. - Метод
#toString()
, который будет ExectuableElement
, имеет аннотацию @Override
.
You можно получить аннотации к этим элементам с помощью методов * 10 81 * интерфейс, который расширяется Element
.
Метод Element#getEnclosingElement()
, что неудивительно, возвращает Element
, который охватывает текущий Element
, если таковой имеется. Таким образом, если бы вы вызвали этот метод для ExecutableElement
, представляющего метод #toString()
, вы бы получили TypeElement
, представляющий класс Foo
.