viernes, 23 de septiembre de 2016

Las Anotaciones JAVA - Documented, Target, Inherited y Retention

1-@Documented

@Documented anotación indica que los elementos que utilizan esta anotación debe documentar JavaDoc. Por ejemplo:

java.lang.annotation.Documented
@Documented
public @interface MiAnotacion {
  //cuerpo de la anotacion
}

@MiAnotacion
public class MiClase { 
     //Cuerpo de la clase
}

Mientras que la generación de la Javadoc de la clase MiClase, el @MiAnotacion anotación se incluiría en eso.

2-@Target

En él se especifica en el que podemos usar la anotación. Por ejemplo: En el código de abajo, hemos definido el tipo de destino como el método que significa la anotación a continuación sólo se pueden utilizar en los métodos.

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
public @interface MiAnotacion {

}


public class MiClase {
   @MiAnotacion
   public void miMetodo()
   {
       //Hacer algo
   }
}

Nota: 1) Si no se define ningún tipo de destino que significa anotación se puede aplicar a cualquier elemento.
2) Además de ElementType.METHOD, una anotación siguiente puede tener posibles valores objetivo.
ElementType.METHOD
ElementType.PACKAGE
ElementType.PARAMETER
ElementType.TYPE
ElementType.ANNOTATION_TYPE
ElementType.CONSTRUCTOR
ElementType.LOCAL_VARIABLE
ElementType.FIELD

3-@Inherited

Las señales de anotación @Inherited de que una anotación personalizado que se utiliza en una clase deben ser heredados por todos sus subclases. Por ejemplo:

java.lang.annotation.Inherited

@Inherited
public @interface MiAnotacion {

}

@MiAnotacion
public class ClasePadre { 
  ... 
}

public class ClaseHija extends ClasePadre { 
   ... 
}

Aquí el ClasePadre clase está utilizando @MiAnotacion anotación que está marcado con la anotación @inherited. Esto significa que el ClaseHija subclase hereda el @MiAnotacion.

4-@Retention

Se indica cómo han de permanecer a largo anotaciones con el tipo de anotación.

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@interface MiAnotacion {
    
}

Aquí hemos utilizado RetentionPolicy.RUNTIME. Hay otras dos opciones también. Vamos a ver qué es lo que significan:
RetentionPolicy.RUNTIME: La anotación debe estar disponible en tiempo de ejecución, para la inspección a través de Java reflexión.
RetentionPolicy.CLASS: La anotación sería en el archivo .class pero no estaría disponible en tiempo de ejecución.
RetentionPolicy.SOURCE: La anotación estaría disponible en el código fuente del programa, no sería ni en el archivo .class, ni estará disponible en el tiempo de ejecución.


No hay comentarios.:

Publicar un comentario