Java 注释处理器 getEnclosingElement() 方法
Java Annotation Processor getEnclosingElement() method
你好,请问Element
界面中getEnclosingElement()
方法的注释是什么意思,不太明白。 javadoc如下:
Returns the innermost element within which this element is, loosely speaking, enclosed.
If this element is one whose declaration is lexically enclosed immediately within the declaration of another element, that other element is returned.
If this is a top-level type, its package is returned.
If this is a package, null is returned.
If this is a type parameter, the generic element of the type parameter is returned.
If this is a method or constructor parameter, the executable element which declares the parameter is returned.
注解可以用在类、变量(全局或局部)、方法等,但不知道注解与Element子类的对应关系。谢谢!!!
一个Element
可以表示,截至Java 13:
- 模块声明 -
ModuleElement
- 包声明 -
PackageElement
- 接口、class、枚举或注释类型 -
TypeElement
- 构造函数、方法或初始值设定项 -
ExecutableElement
- 字段、枚举常量、方法或构造函数参数、局部变量、资源变量或异常参数 -
VariableElement
- 类型参数 -
TypeParameterElement
这些元素中的每一个都可以有注释。例如:
模块-info.java:
@Foobar
module example {
exports com.example;
}
包-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
注释。
- class
Foo
,即 TypeElement
,有一个 @Baz
注释。
- 类型参数
T
,即 TypeParameterElement
,具有 @Qux
注释。
bar
字段 VariableElement
没有注释。
- 构造函数
#Foo(T)
是一个 ExecutableElement
,没有注释。
- 构造函数的参数
bar
,即 VariableElement
,没有注释。
- 方法
#toString()
是一个 ExectuableElement
,有一个 @Override
注释。
您可以通过 AnnotatedConstruct
接口的方法获取这些元素上的注释,Element
扩展了该接口。
方法Element#getEnclosingElement()
returns,不出所料,包含当前Element
的Element
,如果有的话。因此,如果您要在代表方法 #toString()
的 ExecutableElement
上调用该方法,那么您将获得代表 class Foo
的 TypeElement
。
你好,请问Element
界面中getEnclosingElement()
方法的注释是什么意思,不太明白。 javadoc如下:
Returns the innermost element within which this element is, loosely speaking, enclosed.
If this element is one whose declaration is lexically enclosed immediately within the declaration of another element, that other element is returned.
If this is a top-level type, its package is returned.
If this is a package, null is returned.
If this is a type parameter, the generic element of the type parameter is returned.
If this is a method or constructor parameter, the executable element which declares the parameter is returned.
注解可以用在类、变量(全局或局部)、方法等,但不知道注解与Element子类的对应关系。谢谢!!!
一个Element
可以表示,截至Java 13:
- 模块声明 -
ModuleElement
- 包声明 -
PackageElement
- 接口、class、枚举或注释类型 -
TypeElement
- 构造函数、方法或初始值设定项 -
ExecutableElement
- 字段、枚举常量、方法或构造函数参数、局部变量、资源变量或异常参数 -
VariableElement
- 类型参数 -
TypeParameterElement
这些元素中的每一个都可以有注释。例如:
模块-info.java:
@Foobar
module example {
exports com.example;
}
包-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
注释。 - class
Foo
,即TypeElement
,有一个@Baz
注释。 - 类型参数
T
,即TypeParameterElement
,具有@Qux
注释。 bar
字段VariableElement
没有注释。- 构造函数
#Foo(T)
是一个ExecutableElement
,没有注释。 - 构造函数的参数
bar
,即VariableElement
,没有注释。 - 方法
#toString()
是一个ExectuableElement
,有一个@Override
注释。
您可以通过 AnnotatedConstruct
接口的方法获取这些元素上的注释,Element
扩展了该接口。
方法Element#getEnclosingElement()
returns,不出所料,包含当前Element
的Element
,如果有的话。因此,如果您要在代表方法 #toString()
的 ExecutableElement
上调用该方法,那么您将获得代表 class Foo
的 TypeElement
。