web-dev-qa-db-fra.com

Que signifie Java annotation ElementType constantes signifie?

Java.lang.annotation.ElementType :

Un type d'élément de programme. Les constantes de ce type énuméré fournissent une classification simple des éléments déclarés dans un programme Java. Ces constantes sont utilisées avec la méta-annotation Target type pour spécifier où il est légal d'utiliser un type d'annotation.

Il existe les constantes suivantes:

  • ANNOTATION_TYPE - Déclaration du type d'annotation
  • [~ # ~] constructeur [~ # ~] - Déclaration du constructeur
  • Champ [~ # ~] [~ # ~] - Déclaration de champ (inclut les constantes d'énumération)
  • LOCAL_VARIABLE - Déclaration de variable locale
  • [~ # ~] méthode [~ # ~] - Déclaration de méthode
  • [~ # ~] package [~ # ~] - Déclaration de package
  • [~ # ~] paramètre [~ # ~] - Déclaration de paramètre
  • [~ # ~] type [~ # ~] - Classe, interface (y compris le type d'annotation) ou déclaration d'énumération

Quelqu'un peut-il expliquer ce que chacun d'eux sont (où ils seraient annotés dans le code réel)?

53
Action Jackson

Ceci résume les principaux:

@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 est une annotation sur une autre annotation, comme ceci:

@CustomAnnotationTypeAnnotation
public @interface SomeAnnotation {
  ..
}

Le package est défini dans un package-info.Java fichier dans le package, comme ceci:

@CustomPackageLevelAnnotation
package com.some.package;

import com.some.package.annotation.PackageLevelAnnotation;

Pour plus d'informations sur les annotations PACKAGE, voir ici et ici .

48
Javid Jamae

Disons que l'annotation à laquelle vous spécifiez le ElementType s'appelle YourAnnotation:

  • ANNOTATION_TYPE - Déclaration de type d'annotation. Remarque: Cela va sur d'autres annotations

    @YourAnnotation
    public @interface AnotherAnnotation {..}
    
  • CONSTRUCTOR - Déclaration du constructeur

    public class SomeClass {
        @YourAnnotation
        public SomeClass() {..}
    }
    
  • FIELD - Déclaration de champ (inclut les constantes d'énumération)

    @YourAnnotation
    private String someField;
    
  • LOCAL_VARIABLE - Déclaration de variable locale. Remarque: Ceci ne peut pas être lu au moment de l'exécution, il n'est donc utilisé que pour les choses à la compilation, comme le @SuppressWarnings annotation.

    public void someMethod() {
        @YourAnnotation int a = 0;
    }
    
  • METHOD - Déclaration de méthode

    @YourAnnotation
    public void someMethod() {..}
    
  • PACKAGE - Déclaration de package. Remarque: Ceci ne peut être utilisé que dans package-info.Java.

    @YourAnnotation
    package org.yourcompany.somepackage;
    
  • PARAMETER - Déclaration de paramètre

    public void someMethod(@YourAnnotation param) {..}
    
  • TYPE - Classe, interface (y compris le type d'annotation) ou déclaration d'énumération

    @YourAnnotation
    public class SomeClass {..}
    

Vous pouvez spécifier plusieurs ElementType pour une annotation donnée. Par exemple.:

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

TAPEZ :

Annotation:

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

et un exemple d'utilisation:

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