gpt4 book ai didi

Java 注解处理器 getEnshingElement() 方法

转载 作者:行者123 更新时间:2023-12-02 08:54:24 25 4
gpt4 key购买 nike

您好,我想问一下Element接口(interface)中的getEnendingElement()方法的注释是什么意思,不太明白。 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子类之间的对应关系。谢谢!!!

最佳答案

从 Java 13 开始,Element 可以表示:

  • 模块声明 - ModuleElement
  • 包声明 - PackageElement
  • 接口(interface)、类、枚举或注释类型 - 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 注释。
  • 字段 barVariableElement ,没有任何注释。
  • 构造函数 #Foo(T) (将是 ExecutableElement )没有注释。
  • 构造函数的参数 barVariableElement ,没有任何注释。
  • 方法 #toString() 是一个 ExectuableElement ,存在一个 @Override 注释。

您可以通过 AnnotatedConstruct 接口(interface)(Element 扩展)的方法获取这些元素上存在的注释。

不出所料,方法 Element#getEnclosingElement() 返回包含当前 Element (如果有)的 Element 。因此,如果您要在代表方法 ExecutableElement#toString() 上调用该方法,那么您将得到代表类 TypeElementFoo

关于Java 注解处理器 getEnshingElement() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60575485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com