Pregunta

¿Cuál es el propósito de las anotaciones en Java?Tengo una idea confusa de que están en algún lugar entre un comentario y un código real.¿Afectan al programa en tiempo de ejecución?

¿Cuáles son sus usos típicos?

¿Son exclusivos de Java?¿Existe un equivalente en C++?

¿Fue útil?

Solución

Las anotaciones las utiliza principalmente el código que inspecciona otro código.A menudo se utilizan para modificar (es decir,decorar o envolver) clases existentes en tiempo de ejecución para cambiar su comportamiento.Marcos como unidad conjunta y Hibernar use anotaciones para minimizar la cantidad de código que necesita escribir usted mismo para usar los marcos.

oráculo tiene una buena explicación del concepto y su significado en Java en su sitio.

Otros consejos

Además, ¿son exclusivos de Java? ¿Existe un equivalente en C++?

No, pero VB y C# tienen atributos que son lo mismo.

Su uso es bastante diverso.Un ejemplo típico de Java, @Override no tiene ningún efecto en el código, pero el compilador puede usarlo para generar una advertencia (o error) si el método decorado en realidad no anula otro método.De manera similar, los métodos pueden marcarse como obsoletos.

Luego está la reflexión.Cuando reflejas un tipo de clase en tu código, puedes acceder a los atributos y actuar de acuerdo con la información que allí se encuentra.No conozco ningún ejemplo en Java, pero en .NET el compilador lo utiliza para generar (des)serialización información para las clases, determinar el diseño de memoria de estructuras y declarar importaciones de funciones de bibliotecas heredadas (entre otras).También controlan cómo funciona el diseñador de formularios IDE.

/EDITAR:Los atributos de las clases son comparables a las interfaces de etiquetas (como Serializable en Java).Sin embargo, las pautas de codificación .NET dicen que no se deben utilizar interfaces de etiquetas.Además, sólo funcionan a nivel de clase, no a nivel de método.

Anders ofrece un buen resumen y aquí hay un ejemplo de una anotación JUnit.

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Aquí el @Test La anotación le dice a JUnit que el flatfileMissing El método es una prueba que debe ejecutarse y que el resultado esperado es un lanzamiento. IOException.Por lo tanto, cuando ejecute sus pruebas, se llamará a este método y la prueba pasará o fallará en función de si IOException es aventado.

Java también tiene la herramienta de procesamiento de anotaciones (apt), donde no solo creas anotaciones, sino que también decides cómo funcionan estas anotaciones en el código fuente.

Aquí es una introducción.

Para ver algunas cosas interesantes que puedes hacer con Anotaciones, consulta mis anotaciones JavaBean y procesador de anotaciones.

Son excelentes para generar código, agregar validaciones adicionales durante la compilación y también los he estado usando para un marco de mensajes de error (aún no publicado; es necesario aclararlo con los jefes...).

Por definición literal, una anotación agrega notas a un elemento.Asimismo, las anotaciones de Java son etiquetas que insertamos en el código fuente para proporcionar más información sobre el código.Las anotaciones de Java asocian información con el elemento del programa anotado.Además de las anotaciones de Java, los programas Java tienen una gran cantidad de documentación informal que normalmente está contenida en comentarios en el archivo de código fuente.Pero las anotaciones de Java son diferentes de los comentarios: anotan los elementos del programa directamente utilizando tipos de anotaciones para describir la forma de las anotaciones.Las anotaciones de Java presentan la información de forma estándar y estructurada para que las herramientas de procesamiento puedan utilizarla adecuadamente.

Para leer en detalle, hay un buen tutorial sobre Anotaciones de Java

¿Cuándo se utiliza la anotación @Override de Java y por qué?El enlace hace referencia a una pregunta sobre cuándo se debe utilizar la anotación de anulación (@override).Esto podría ayudar a comprender mejor el concepto de anotación. Consulte.

Las anotaciones cuando se trata de EJB se conoce como elegir el enfoque implícito de la prisión media en un enfoque explícito de la vida media, cuando usa la anotación, personaliza lo que necesita exactamente de la API, por ejemplo, necesita llamar al método de transacción para una transferencia bancaria :sin usar anotación:el código será

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

Mientras usa la anotación, su código no contiene llamadas API engorrosas para usar los servicios de WAREWARE.El código es limpio y centrado en la lógica empresarial.

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}

Anotaciones, una forma de metadatos, proporciona datos sobre un programa que no forma parte del programa en sí.Las anotaciones no tienen ningún efecto directo sobre el funcionamiento del código que anotan.

Las anotaciones tienen varios usos, entre ellos:

  • Información para el compilador. — El compilador puede utilizar anotaciones para detectar errores o suprimir advertencias.
  • Procesamiento en tiempo de compilación y tiempo de implementación — Las herramientas de software pueden procesar información de anotaciones para generar código, archivos XML, etc.
  • Procesamiento en tiempo de ejecución — Algunas anotaciones están disponibles para ser examinadas en tiempo de ejecución.

El alcance de la visibilidad está definido por java.lang.annotation.RetentionPolicy constantes SOURCE, CLASS, y RUNTIME

  • RetentionPolicy.SOURCE:La anotación estaría disponible en el código fuente del programa y puede ser utilizada por el compilador o apto para la generación de código.
  • RetentionPolicy.CLASS:La anotación estaría en el archivo .class pero no estaría disponible en tiempo de ejecución.Utilizado por herramientas de manipulación de códigos de bytes como MAPE realizar las modificaciones
  • RetentionPolicy.RUNTIME:La anotación estaría disponible en el archivo .class y en tiempo de ejecución, para su inspección a través de la reflexión de Java a través de getAnnotations().
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top