web-dev-qa-db-ja.com

JavaアノテーションElementType定数はどういう意味ですか?

Java.lang.annotation.ElementType

プログラム要素タイプ。この列挙型の定数は、Javaプログラムで宣言された要素の単純な分類を提供します。これらの定数は Target メタ注釈とともに使用されます。 typeを使用して、注釈タイプを使用することが適切な場所を指定します。

次の定数があります。

  • ANNOTATION_TYPE-注釈タイプの宣言
  • [〜#〜] constructor [〜#〜]-コンストラクター宣言
  • [〜#〜] field [〜#〜]-フィールド宣言(enum定数を含む)
  • LOCAL_VARIABLE-ローカル変数宣言
  • [〜#〜] method [〜#〜]-メソッド宣言
  • [〜#〜] package [〜#〜]-パッケージ宣言
  • [〜#〜] parameter [〜#〜]-パラメータ宣言
  • [〜#〜] type [〜#〜]-クラス、インターフェース(注釈型を含む)、または列挙型宣言

誰かがそれらのそれぞれが何であるかを説明できますか(実際のコードで注釈が付けられる場所)?

53
Action Jackson

これは主なものを要約しています:

@CustomTypeAnnotation
public class MyAnnotatedClass {
  @CustomFieldAnnotation
  private String foo;

  @CustomConstructorAnnotation
  public MyAnnotatedClass() {
  }

  @CustomMethodAnnotation
  public String bar(@CustomParameterAnnotation String str) {
    @CustomLocalVariableAnnotation String asdf = "asdf";
    return asdf + str;
  }
}

ANNOTATION_TYPEは、次のような別の注釈の注釈です。

@CustomAnnotationTypeAnnotation
public @interface SomeAnnotation {
  ..
}

パッケージは、次のようにパッケージのpackage-info.Javaファイルで定義されます。

@CustomPackageLevelAnnotation
package com.some.package;

import com.some.package.annotation.PackageLevelAnnotation;

PACKAGEアノテーションの詳細については、 here および here を参照してください。

48
Javid Jamae

ElementTypeを指定する注釈はYourAnnotationと呼ばれるとしましょう:

  • ANNOTATION_TYPE-注釈タイプの宣言。 注:これは他の注釈にも適用されます

    @YourAnnotation
    public @interface AnotherAnnotation {..}
    
  • CONSTRUCTOR-コンストラクター宣言

    public class SomeClass {
        @YourAnnotation
        public SomeClass() {..}
    }
    
  • FIELD-フィールド宣言(enum定数を含む)

    @YourAnnotation
    private String someField;
    
  • LOCAL_VARIABLE-ローカル変数宣言。 注:これは実行時に読み取ることができないため、@SuppressWarningsアノテーションなどのコンパイル時のものにのみ使用されます。

    public void someMethod() {
        @YourAnnotation int a = 0;
    }
    
  • METHOD-メソッド宣言

    @YourAnnotation
    public void someMethod() {..}
    
  • PACKAGE-パッケージ宣言。 注:これはpackage-info.Javaでのみ使用できます。

    @YourAnnotation
    package org.yourcompany.somepackage;
    
  • パラメータ-パラメータ宣言

    public void someMethod(@YourAnnotation param) {..}
    
  • TYPE-クラス、インターフェース(注釈タイプを含む)、または列挙宣言

    @YourAnnotation
    public class SomeClass {..}
    

特定の注釈に複数のElementTypesを指定できます。例えば。:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
94
Bozho

[〜#〜] type [〜#〜]

注釈:

@Target({ElementType.TYPE})    // This annotation can only be applied to
public @interface Tweezable {  // class, interface, or enum declarations.
}

および使用例:

@Tweezable
public class Hair {
    ...
}
3
Action Jackson