2010-02-17 6 views

Respuesta

11

Anotaciones tienen diferentes retention policies:

  • FUENTE - no en el archivo de clase, descartado por el compilador (no sería necesario en tiempo de ejecución)
  • CLASE - en el archivo de clase, pero la máquina virtual puede tirarlos
  • distancia
  • DURACIÓN - disponible para la reflexión en tiempo de ejecución

lógica indicaría que las anotaciones de retención de origen no sería necesaria en tiempo de ejecución, CLASE no debería, y RUNTIME debe estar disponible.

Un vistazo rápido a las anotaciones JSR 305 indica que utilizan la política de retención RUNTIME (example), lo que me indica que estas jarras serían necesarias para cargar las clases en tiempo de ejecución para satisfacer el contrato de anotación.

Pero en realidad no lo he probado yo mismo.

+1

Alex, gracias por indicarme el camino correcto con las anotaciones. Solo planeo usar la anotación edu.umd.cs.findbugs.annotations.SuppressWarnings, que tiene retención de CLASS. Probaré una prueba en los próximos días promocionando algunos archivos anotados en un entorno de compilación y ejecución. – tinman

+1

Desafortunadamente, esto es incorrecto. Como [señala Matt McHenry] (http://stackoverflow.com/a/3577312/1005481), estas anotaciones no * necesitan * estar presentes en el tiempo de ejecución. –

8

Por my related question, normalmente no se encontrará con ningún problema si estas anotaciones no están presentes en el tiempo de ejecución, aunque algunas sí tienen @Retention(RUNTIME).

Cuestiones relacionadas