簡體   English   中英

Java 注釋處理器 getEnclosureElement() 方法

[英]Java Annotation Processor getEnclosingElement() method

你好,我想問一下Element接口中getEnclosingElement()方法的注釋是什么意思,不太明白。 javadoc如下:

返回最里面的元素,松散地說,該元素包含在其中。

  • 如果此元素的聲明在詞法上立即包含在另一個元素的聲明中,則返回該另一個元素。

  • 如果這是頂級類型,則返回其包。

  • 如果這是一個,則返回 null。

  • 如果這是一個類型參數,則返回該類型參數的泛型元素。

  • 如果這是一個方法或構造函數參數,則返回聲明該參數的可執行元素。

注解可以用於類、變量(全局或局部)、方法等,但不知道注解與Element子類的對應關系。 謝謝!!!

從 Java 13 開始,一個Element可以表示:

  • 模塊聲明 - ModuleElement
  • 包聲明 - PackageElement
  • 接口、類、枚舉或注釋類型 - TypeElement
  • 構造函數、方法或初始值設定項 - ExecutableElement
  • 字段、枚舉常量、方法或構造函數參數、局部變量、資源變量或異常參數 - VariableElement
  • 類型參數 - TypeParameterElement

這些元素中的每一個都可以有注釋。 例如:

模塊信息.java

@Foobar
module example {
  exports com.example;
}

包信息.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注釋本。

您可以通過Element擴展的AnnotatedConstruct接口的方法獲取這些元素上的AnnotatedConstruct

該方法Element#getEnclosingElement()返回時,勿庸置疑,所述Element包圍當前Element ,如果有的話。 因此,如果您要在表示方法#toString()ExecutableElement上調用該方法,那么您將獲得表示Foo類的TypeElement

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM