Anotación de retención
La anotación de retención indica hasta qué etapa se conservará este tipo de anotación. Hay tres valores:
1.RetentionPolicy.SOURCE: este tipo de anotaciones solo se conserva en el nivel del código fuente y se ignorará durante la compilación.
2.RetentionPolicy.CLASS: este tipo de anotaciones se conserva durante la compilación y existe en el archivo de clase, pero la JVM lo ignorará.
3.RetentionPolicy.RUNTIME: la JVM retendrá las anotaciones de este tipo, de modo que la JVM u otro código pueda leerlas y utilizarlas utilizando el mecanismo de reflexión en tiempo de ejecución.
El ejemplo 5 demuestra la declaración de RetentionPolicy.RUNTIME:
Ejemplo 1 de anotaciones de Java:
Copie el código de código de la siguiente manera:
@Retención(RetentionPolicy.RUNTIME)
@interfaz pública Test_Retention {
Cadena doTestRetention();
}
En este ejemplo, la anotación @Retention(RetentionPolicy.RUNTIME) indica que la máquina virtual conservará la anotación Test_Retention para que pueda leerse mediante reflexión en tiempo de ejecución.
Anotaciones documentadas
La anotación documentada indica que esta anotación debe ser registrada por la herramienta javadoc. De forma predeterminada, javadoc no incluye anotaciones, pero si se especifica @Documented al declarar una anotación, será procesada por herramientas como javadoc, por lo que la información del tipo de anotación. También se incluirá en la documentación generada. El ejemplo 6 demuestra con más detalle el uso de @Documented:
Ejemplo 2 de anotaciones de Java:
Copie el código de código de la siguiente manera:
@Documentado
@interfaz pública Prueba_Documentada {
Cadena doTestDocument();
}
A continuación, modifique la clase TestAnnotations de la siguiente manera:
Copie el código de código de la siguiente manera:
Anotaciones de prueba de clase pública {
público estático vacío principal (String arg []) {
nuevas TestAnnotations().doSomeTestRetention();
nuevas TestAnnotations().doSomeTestDocumented();
}
@Test_Retention (doTestRetention="Conservar prueba de información de anotaciones")
público vacío doSomeTestRetention() {
System.out.printf("Tipo de anotación de prueba 'Retención'");
}
@Test_Documented(doTestDocument="Hola documento")
público vacío doSomeTestDocumented() {
System.out.printf("Tipo de anotación de prueba 'Documentado'");
}
}
Ahora, si usa el comando javadoc para generar el archivo TestAnnotations.html, verá resultados similares a los de la Figura 1.
Como puede ver en la captura de pantalla, no hay ningún método de información de tipo de anotación () del método doSomeTestRetention() en el documento. Sin embargo, el documento del método doSomeTestDocumented() proporciona la información de descripción de la anotación. La etiqueta @Documented se agrega a la anotación Test_Documented. La anotación anterior Test_Retention no especificaba la etiqueta @Documented.
Anotación heredada (puede que haya algún problema con este párrafo...)
Este es un tipo de anotación un poco más complejo. Indica que la clase anotada heredará automáticamente. Más específicamente, si se usa la etiqueta @Inherited al definir la anotación, y luego la anotación definida se usa para anotar otra clase principal, la clase principal. tiene una subclase, entonces todas las propiedades de la clase principal se heredarán en su subclase. En el Ejemplo 7, verá los beneficios de usar la etiqueta @Inherited.
Ejemplo 3 de anotaciones Java
Primero, define tu anotación:
Copie el código de código de la siguiente manera:
@Heredado
público @interface MiObjetoParent {
booleano isInherited() valor predeterminado verdadero;
String doSomething() predeterminado "¿Hacer qué?";
}
A continuación, se anota una clase con anotaciones:
Copie el código de código de la siguiente manera:
@MiObjetoPadre
clase pública MiObjetoHijo {
}
Como puede ver, no necesita definir los métodos de interfaz en la clase de implementación. Debido a la etiqueta @Inherited, estos se heredan automáticamente. ¿Cómo se vería si usara una forma antigua de definir la clase de implementación? un vistazo a continuación. Esta es una implementación antigua:
Copie el código de código de la siguiente manera:
clase pública MyChildObject implementa MyParentObject {
público booleano se hereda() {
devolver falso;
}
cadena pública hacer algo() {
devolver "";
}
público booleano es igual (Objeto obj) {
devolver falso;
}
público int código hash() {
devolver 0;
}
cadena pública toString() {
devolver "";
}
Tipo de anotación de clase pública() {
devolver nulo;
}
}
¿Ves la diferencia? Como puedes ver, tienes que implementar todos los métodos de la interfaz principal. Además de los métodos isInherited() y doSomething() de myParentObject, también necesitas implementar los iguales(), toString(. ) y el método hasCode(). También existe el método annotationType() de la clase java.lang.annotation.Annotation. Ya sea que desees implementar estos métodos o no, debes incluirlos en el objeto heredado.
en conclusión
Este artículo le muestra cómo facilitar el desarrollo mediante el uso de la función de anotaciones de JDK5. Las anotaciones no afectan directamente la semántica del programa. Las herramientas de desarrollo e implementación pueden leer estas anotaciones y procesarlas de alguna manera, y usar el programa que contiene las anotaciones. puede reemplazar los archivos fuente Java adicionales, documentos XML u otros artefactos antiguos. El uso de anotaciones puede lograr lo mismo con menos código y tiene una mejor detección de errores en tiempo de compilación. El propósito de las anotaciones es dedicar menos tiempo a detalles difíciles e inútiles y centrarse más en las reglas de lógica empresarial. Este artículo es la primera parte de la serie de anotaciones de Java. En la segunda parte, aprenderá a utilizar anotaciones para desarrollar un sistema simple. Aplicación web. Finalmente, en la tercera parte, verá un ejemplo complejo que incluye varias tablas de bases de datos.