アノテーションプロセッサgetEnclosingElement()メソッド

劉Silong:

こんにちは、私はのコメントの意味が何であるかをお尋ねしたいgetEnclosingElement()のメソッドElementインタフェースは、私はかなり理解していません。javadocは、次のように:

大まかに囲まれて、話して、この要素がある内、最も内側の要素を返します。

  • この要素は、その宣言字句他の要素が返されることが、別の要素の宣言内直ちに囲まれているものである場合。

  • これがある場合は、トップレベルのタイプ、そのパッケージが返されます。

  • これがあれば、パッケージ、nullが返されます。

  • これがあればtypeパラメータ、型パラメータの一般的な要素が返されます。
  • これがある場合メソッドまたはコンストラクタパラメータ、パラメータを宣言し、実行可能要素が返されます。

注釈等のクラス、変数(グローバルまたはローカル)、メソッド、上で使用することができますが、私は、注釈や要素サブクラスとの対応を知りません。おかげで!!!

なスロー:

ANは、ElementJavaの13のように表すことができます。

  • モジュール宣言 - ModuleElement
  • パッケージ宣言 - PackageElement
  • インタフェース、クラス、列挙、または注釈タイプ - TypeElement
  • コンストラクタ、メソッド、または初期化子 - ExecutableElement
  • フィールド、enum定数、メソッドまたはコンストラクタのパラメータ、ローカル変数、リソース変数、または例外パラメータ - VariableElement
  • typeパラメータ - 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注釈存在を。
  • typeパラメータTになり、TypeParameterElement持ってい@Qux注釈存在を。
  • フィールドbarだろう、VariableElement、何の注釈の存在を持っていません。
  • コンストラクタ#Foo(T)だろう、ExecutableElement、何の注釈の存在を持っていません。
  • コンストラクタのパラメータbarとなり、VariableElement、何の注釈の存在を持っていません。
  • 方法#toString()なり、ExectuableElement有する@Override注釈存在します。

あなたはの方法を経由してこれらの要素の注釈が存在得ることができるAnnotatedConstructインターフェース、Element拡張します。

メソッドのElement#getEnclosingElement()戻りは、当然、Elementこれは現在を囲むElement任意の場合は、。あなたが上でそのメソッドを呼び出すようにしたのであればExecutableElementメソッドを表す#toString()、あなたが取得したいTypeElementクラスを表しますFoo

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=31558&siteId=1