Política de retención de FUENTE de anotaciones

Desde el documento de Java:

CLASE: El compilador debe registrar las anotaciones en el archivo de clase, pero no es necesario que la VM las guarde en tiempo de ejecución.

TIEMPO DE EJECUCIÓN: el compilador debe registrar las anotaciones en el archivo de clase y la máquina virtual las debe conservar durante el tiempo de ejecución, de modo que se puedan leer de forma reflexiva.

FUENTE: El compilador debe descartar las anotaciones.

Entiendo los usos de RUNTIME (para usar la anotación con reflexión) y CLASS (para el compilador) pero no entiendo cuándo puede ser útil usar

@Retention (RetentionPolicy.SOURCE)

¿Puede usted explicar?

preguntado el 08 de noviembre de 11 a las 10:11

3 Respuestas

Cosas como @SuppressWarnings, @Override son anotaciones utilizadas por el compilador, no necesarias en tiempo de ejecución. Para aquellos RetentionPolicy.SOURCE tendría sentido. También se pueden usar anotaciones para generar código (mire Spring ROO); dichas anotaciones tampoco son necesarias en tiempo de ejecución.

respondido 08 nov., 11:14

y ¿por qué no RetentionPolicy.CLASS? - JohnJohnGa

+1: Algunas anotaciones utilizadas por el compilador son retención de CLASE. - Peter Lawrey

Estos no son necesarios en el ByteCode (en el archivo .class). - gkamal

@JohnJohnGa, el compilador solo necesita las anotaciones SuppressWarnings y Override para el código que está compilando inmediatamente. En desuso debe ser CLASS o RUNTIME, ya que puede generar una advertencia en el código compilado más tarde (que lo usa): Peter Lawrey

Alguna vez creo SOURCE anotaciones como "Tareas pendientes", "errores", "trampas" o simplemente "recordatorios". Puedo elegir escribir procesadores para él o buscarlo en IDE - nabster

Esta respuesta tiene mucho sentido: https://stackoverflow.com/a/43910948/3009968.

No le gustaría incluir una dependencia, cuyos efectos deseados se realizan incluso antes de que se compile el código. Por ejemplo, @SuppressWarnings

No le gustaría incluir una dependencia que sea utilizada por el compilador para, digamos, generar código, pero que no se requiere en absoluto durante el tiempo de ejecución. Por ejemplo, como ya se mencionó en la respuesta anterior:primavera roo.

Respondido 11 Oct 19, 18:10

RetentionPolicy.CLASS - La anotación definida se almacenará en el .clase archivo, pero no disponible en tiempo de ejecución. Esta es la política de retención predeterminada si no especifica ninguna política de retención.

RetentionPolicy.SOURCE - El compilador ignorará la anotación definida al compilar el código. Por lo tanto, la anotación solo está disponible en el código fuente y no en el .clase archivos, y no en tiempo de ejecución también.

Respondido 14 ago 21, 09:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.