Uso de declaración predeterminada de @interface en Java

4 minutos de lectura

avatar de usuario
oscarryz

Acabo de descubrir esta característica.

Declarar una interfaz usando la sintaxis “@interface” le permite poner un valor predeterminado.

public @interface HelloWorld { 
     public String sayHello() default "hello world";
}

Esto es algo nuevo para mi. ¿Cómo se supone que se debe usar ese valor predeterminado?

No puedo encontrar referencias a eso, porque www está lleno de documentos de la interfaz de Java antes de la adición de “@” en Java 1.5 (¿estaba en .5 o en .4?)


EDITAR

gracias por las respuestas (De alguna manera estaba cerca de “anotación”, porque ya uso la etiqueta): P

¡¡¡Sabía que debería haber leído ese documento hace años!!!… a ver…

Muchas API requieren una buena cantidad de código repetitivo. Para….

avatar de usuario
Michael Myers

Acabas de escribir un anotación.

Con respecto a default declaración en particular: esto se usa porque las anotaciones y las interfaces no pueden tener constructores, por lo que esta es la única forma de tener un valor predeterminado para un atributo de anotación. Desde el Especificación del lenguaje Java:

Un elemento de tipo de anotación puede tener un valor predeterminado especificado para él. Esto se hace siguiendo su lista de parámetros (vacía) con la palabra clave default y el valor predeterminado del elemento.

Los valores predeterminados se aplican dinámicamente en el momento en que se leen las anotaciones; los valores predeterminados no se compilan en anotaciones. Por lo tanto, cambiar un valor predeterminado afecta las anotaciones incluso en las clases que se compilaron antes de realizar el cambio (suponiendo que estas anotaciones carezcan de un valor explícito para el elemento predeterminado).

Observo que ninguna de las anotaciones en java.lang.anotación Sin embargo, use valores predeterminados.


Uso: tienes una anotación @HelloWorld con un atributo sayHello. Podrías ponerlo en una clase como esta:

@HelloWorld(sayHello="Hi")
public class MyClass {
}

Ya que tiene un valor predeterminado, podría simplemente poner

@HelloWorld
public class MyClass {
}

(Tenga en cuenta que el documento dice: “En anotaciones con un solo elemento, el elemento debe llamarse value“; Creo que la única razón para hacer esto es que podrías escribir @HelloWorld("Hi") sin tener que nombrar el parámetro).

Tal como está escrito, su anotación se puede usar en cualquier elemento de programa válido (incluidos métodos y declaraciones de variables). Puedes cambiar esto con el @Target anotación.

Finalmente, establecer el RetentionPolicy le permite decidir si la anotación debe ser descartada por el compilador, descartada por la VM o mantenida siempre.


Dos paquetes que también pueden ser interesantes: javax.anotación y javax.anotación.procesamiento. Y aquí es un ejemplo del uso del procesamiento de anotaciones para el análisis del código fuente.

  • +1: Gracias mmyers: ¿Tiene algún resumen para este programador perezoso?

    – OscarRyz

    25 de febrero de 2009 a las 22:07

  • ¿Resumen de qué? ¿Todos los usos de las anotaciones?

    – Michael Myers

    25 de febrero de 2009 a las 22:13

  • No, solo del uso de @interface… Veré el enlace… más tarde :-/

    – OscarRyz

    25 de febrero de 2009 a las 22:15

  • Bien, resumen ejecutivo: las anotaciones son muy útiles para el análisis del código fuente y para la generación de código (muchos marcos web hacen esto). ¿Suficientemente bueno?

    – Michael Myers

    25 de febrero de 2009 a las 22:23

  • @mmyers: Y marcos de prueba también, por supuesto. Ok, entonces, lo que he publicado es cómo se declara la anotación. Luego, para usarlo, solo anoto la clase que necesito (¿se aplica también a métodos e interfaces?) ¿Qué pasa con los atributos? Y luego, utilizando una herramienta de procesamiento de anotaciones, los lee. ¿Tengo razón?

    – OscarRyz

    25 de febrero de 2009 a las 22:27

eso es un anotación no estás declarando una interfaz. Se agregó en Java 1.5.

  • +1. Oh… sí, la anotación. Creo que descarté la conferencia para aquellos cuando dije “Cuando necesite crear una herramienta de procesamiento de anotaciones, llegaré a eso”. Hoy estaba mirando el código fuente de Groovy y eso fue lo primero que me desconcertó.

    – OscarRyz

    25 de febrero de 2009 a las 22:10

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad