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.


Creación de anotaciones personalizadas en JAVA




  • Las anotaciones se crean mediante @interface, seguido del nombre de la anotación como se muestra en el ejemplo siguiente.
  • Una anotación puede tener elementos. Se ven como métodos. Por ejemplo, en el código de abajo, tenemos cuatro elementos. No debemos proporcionar la implementación de estos elementos.
  • Todas las anotaciones se extiende interfaz java.lang.annotation.Annotation. Las anotaciones no pueden incluir cualquier cláusula se extiende.


import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MiAnotacion{
    int studentAge() default 18;
    String studentName();
    String stuAddress();
    String stuStream() default "CSE";
}


Nota: Todos los elementos que tienen valores predeterminados establecidos, mientras se crea anotaciones pueden ser omitidos durante el uso de la anotación. Por ejemplo, si estoy aplicando la anotación anterior a una clase, entonces lo haría así:

@MiAnotacion(
    studentName="Juan",
    stuAddress="uru, Mich"
)
public class MiClase {
...
}

Como se puede ver, no hemos dado ningún valor a los elementos studentAge y stuStream ya que es opcional para establecer los valores de estos elementos (valores por defecto ya se han establecido en la definición de anotación, pero si se desea se puede asignar un nuevo valor durante el uso de la anotación de la misma manera como lo hicimos para otros elementos). Sin embargo tenemos que proporcionar los valores de otros elementos (los elementos que no tienen conjunto de valores por defecto), mientras que el uso de la anotación.

Nota: También podemos tener elementos de matriz en una anotación. Así es como podemos usarlos:

definición anotación:

@interface MiAnotacion {
    int      count();
    String[] books();
}

Uso:

@MiAnotacion(
    count=3,
    books={"PHP", "Java"}
)
public class MyClass {

}

Le permite volver al tema de nuevo: En el ejemplo de anotación personalizada hemos utilizado estos cuatro anotaciones: @Documented, @Target, @Inherited y @Retention. Vamos a discutir en detalle.en el siguiente post.


Las anotaciones incorporadas en Java

Java tiene tres anotaciones incorporadas:



  • @Override
  • @Deprecated
  • @SuppressWarnings




1-@Override

Mientras que sustituir un método en la clase del niño, debemos utilizar esta anotación para marcar ese método. Esto hace que el código legible y evitar problemas de mantenimiento, tales como: mientras se cambia el método de firma de la clase padre, debe cambiar la firma en las clases hijas (donde se utiliza esta anotación) de lo contrario compilador tiraría error de compilación. Esto es difícil de rastrear cuando usted no ha utilizado esta anotación.

Ejemplo:

public class PadreClass {

    public void justoMetodo() {
        System.out.println("Metodo de la clase padre");
    }
}


public class HijaClass extends MyParentClass {

    @Override
    public void justoMetodo() {
        System.out.println("Metodo de la clase hija");
    }
}

Creo que el ejemplo se explica por sí solo.


2-@Deprecated

@Deprecated anotación indica que el elemento de marcado (clase, método o campo) es obsoleto y ya no debe ser utilizado. El compilador genera una advertencia cada vez que un programa utiliza un método, clase, o un campo que ya ha sido marcado con la anotación @Deprecated. Cuando está en desuso un elemento, sino que también debe ser documentada mediante la etiqueta Javadoc @deprecated, como se muestra en el siguiente ejemplo. Tome nota de la diferencia con el caso @Deprecated y @deprecated. @deprecated se utiliza a modo de documentación.

Ejemplo:

@Deprecated
public void algunMetodo(){
    // Hacer algo
}

Ahora, siempre que cualquier programa quiera utilizar este método, el compilador generaría una advertencia.


3-@SuppressWarnings

Esta anotación instruye compilador de hacer caso omiso de las advertencias específicas. Por ejemplo, en el código de abajo, yo estoy llamando a un método en desuso (supongamos que el método deprecatedMethod () está marcado con la anotación @Deprecated) por lo que el compilador debería generar una advertencia, sin embargo estoy usando @@ SuppressWarnings anotación que suprimiría que deprecation advertencia.

@SuppressWarnings("deprecation")
    void miMetodo() {
        myObject.deprecatedMethod();
   }

Las anotaciones Java tutorial con ejemplos

Anotaciones Java nos permiten añadir información de metadatos en nuestro código fuente, aunque no son una parte del programa en sí. Se han añadido anotaciones al java JDK 5. Anotación no tiene efecto directo sobre el funcionamiento del código que anotar (es decir, que no afecta a la ejecución del programa).

En este tutorial vamos a cubrir siguientes temas: Uso de anotaciones, cómo aplicar las anotaciones, que están disponibles en el Java y cómo crear anotaciones personalizados predefinidos tipos de anotación.

¿Cuál es el uso de anotaciones?

1) Instrucciones para el compilador: Hay tres anotaciones incorporadas disponibles en Java (@Deprecated, @Override y @SuppressWarnings) que se pueden utilizar para dar ciertas instrucciones al compilador. Por ejemplo la anotación @ Override se utiliza para dar instrucciones compilador que el método anotado es reemplazar el método. Más información sobre estas anotaciones incorporadas con ejemplo se discute en las siguientes secciones de este artículo.

2) en tiempo de compilación instructores: Las anotaciones pueden proporcionar instrucciones en tiempo de compilación al compilador que se pueden utilizar también en otras herramientas de construcción sofware para la generación de código, archivos XML, etc.

3) Las instrucciones en tiempo de ejecución: Podemos definir anotaciones para estar disponible en tiempo de ejecución que podremos acceder usando Java reflexión y se puede utilizar para dar instrucciones al programa en tiempo de ejecución. Vamos a discutir esto con la ayuda de un ejemplo, más adelante en este mismo post.

Anotaciones básicas

Una anotación comienza siempre con el símbolo @ seguido del nombre de la anotación. El símbolo @ indica al compilador que se trata de una anotación.

Por ejemplo, @Override
Aquí @ símbolo representa que esta es una anotación y el accionamiento es el nombre de esta anotación.

Donde podemos utilizar las anotaciones?
Las anotaciones pueden ser aplicados a las clases, interfaces, métodos y campos. Por ejemplo se aplica la anotación de abajo para el método.


@Override
void myMethod() { 
    //Do something 
}

Lo que esta anotación está haciendo exactamente aquí se explica en la siguiente sección, pero para ser breve que está instruyendo compilador que myMethod () es un método de alteración temporal que está reemplazando el método (myMethod ()) de la superclase.