sirven - notacion en java
¿Qué significan las constantes ElementType de anotación Java? (3)
Digamos que la anotación a la que especifica ElementType
se llama YourAnnotation
:
ANNOTATION_TYPE - Declaración de tipo de anotación. Nota: Esto va en otras anotaciones
@YourAnnotation public @interface AnotherAnnotation {..}
CONSTRUCTOR - Declaración de constructor
public class SomeClass { @YourAnnotation public SomeClass() {..} }
CAMPO - Declaración de campo (incluye constantes enum)
@YourAnnotation private String someField;
LOCAL_VARIABLE - Declaración de variable local. Nota: Esto no se puede leer en tiempo de ejecución, por lo que se usa solo para cosas de tiempo de compilación, como la anotación
@SuppressWarnings
.public void someMethod() { @YourAnnotation int a = 0; }
MÉTODO - Declaración de método
@YourAnnotation public void someMethod() {..}
PAQUETE - Declaración del paquete. Nota: Esto se puede usar solo en
package-info.java
.@YourAnnotation package org.yourcompany.somepackage;
PARÁMETRO - Declaración de parámetros
public void someMethod(@YourAnnotation param) {..}
TYPE - Clase, interfaz (incluido el tipo de anotación) o declaración enum
@YourAnnotation public class SomeClass {..}
Puede especificar múltiples ElementType
para una anotación determinada. P.ej:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
java.lang.annotation.ElementType
:
Un tipo de elemento de programa. Las constantes de este tipo enumerado proporcionan una clasificación simple de los elementos declarados en un programa Java. Estas constantes se usan con el tipo de meta-anotación de Target
para especificar dónde es legal usar un tipo de anotación.
Hay las siguientes constantes:
- ANNOTATION_TYPE - Declaración de tipo de anotación
- CONSTRUCTOR - Declaración de constructor
- CAMPO - Declaración de campo (incluye constantes enum)
- LOCAL_VARIABLE - Declaración de variable local
- MÉTODO - Declaración de método
- PAQUETE - Declaración del paquete
- PARÁMETRO - Declaración de parámetros
- TYPE - Clase, interfaz (incluido el tipo de anotación) o declaración enum
¿Alguien puede explicar lo que son cada uno de ellos (dónde serían anotados en el código real)?
Esto resume los principales:
@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 es una anotación en otra anotación, como esta:
@CustomAnnotationTypeAnnotation
public @interface SomeAnnotation {
..
}
El paquete se define en un archivo package-info.java
en el paquete, como este:
@CustomPackageLevelAnnotation
package com.some.package;
import com.some.package.annotation.PackageLevelAnnotation;
Para obtener más información sobre las anotaciones de PAQUETES ver here y here .
TIPO :
Anotación:
@Target({ElementType.TYPE}) // This annotation can only be applied to
public @interface Tweezable { // class, interface, or enum declarations.
}
y un uso de ejemplo:
@Tweezable
public class Hair {
...
}