@Override originalmente no estaba en el idioma. Cuando se sintió la necesidad de agregarlo, fue más fácil usar un mecanismo genérico (anotaciones) que agregar una nueva palabra clave al idioma. Agregar una nueva palabra clave siempre es un cambio incompatible, ya que puede romper los programas que usan esas palabras como identificador.
En los idiomas que agregan un marcador de anulación desde el primer día, a menudo es una palabra clave (por ejemplo, Kotlin y Scala), en Java se trataba de mantener la compatibilidad con versiones anteriores de Java que no tenían ningún marcador de anulación.
Parece inconsistente que la anulación sea una anotación, cuando ha habido cambios que han introducido nuevas palabras clave. Por ejemplo, el modificador "predeterminado" para los métodos de interfaz.
jwa
66
@jwa No realmente: defaultya era una palabra clave reservada (utilizada en las declaraciones de cambio), solo le agregaron un nuevo uso. También hay algunas palabras clave que no hacen nada en este momento pero están reservadas para uso futuro (const, goto) - vea JLS §3.9
Michał Kosmulski
3
"ejemplos son Kotlin y Java" parece un error tipográfico aquí, ¿querías escribir, por ejemplo, Scala en lugar de Java?
mosquito
66
Si bien es cierto que agregar palabras clave globales rompe cosas, podría haberse agregado como una palabra clave contextual sin romper el código. se supone que esto no se hizo ya que complicaría un poco el análisis y el mecanismo de anotación fue lo suficientemente bueno
jk.
1
@ MichałKosmulski: Recuerdo que la enumpalabra clave que se agregó rompería el código anterior. Más palabras clave de última hora aquí: stackoverflow.com/questions/16506411
Allon Guralnek
13
No necesita la anotación @Override para anular realmente el comportamiento; Es una anotación porque simplemente agrega algo de contexto de la intención del método para el compilador, no cambia el método en sí.
Sin la anotación, puede tener la intención de anular la funcionalidad, pero accidentalmente no lo hace (mediante el uso de una firma ligeramente diferente). Agregar la anotación le dice al compilador que genere un error si este método no está anulando el comportamiento.
Como tal, tiene perfecto sentido como una anotación.
+1 Tiene sentido que, de forma similar a la desactivación de advertencias a través de anotaciones, también sea posible habilitar advertencias / errores opcionales a través de anotaciones.
Respuestas:
@Override originalmente no estaba en el idioma. Cuando se sintió la necesidad de agregarlo, fue más fácil usar un mecanismo genérico (anotaciones) que agregar una nueva palabra clave al idioma. Agregar una nueva palabra clave siempre es un cambio incompatible, ya que puede romper los programas que usan esas palabras como identificador.
En los idiomas que agregan un marcador de anulación desde el primer día, a menudo es una palabra clave (por ejemplo, Kotlin y Scala), en Java se trataba de mantener la compatibilidad con versiones anteriores de Java que no tenían ningún marcador de anulación.
fuente
default
ya era una palabra clave reservada (utilizada en las declaraciones de cambio), solo le agregaron un nuevo uso. También hay algunas palabras clave que no hacen nada en este momento pero están reservadas para uso futuro (const, goto) - vea JLS §3.9enum
palabra clave que se agregó rompería el código anterior. Más palabras clave de última hora aquí: stackoverflow.com/questions/16506411No necesita la anotación @Override para anular realmente el comportamiento; Es una anotación porque simplemente agrega algo de contexto de la intención del método para el compilador, no cambia el método en sí.
Sin la anotación, puede tener la intención de anular la funcionalidad, pero accidentalmente no lo hace (mediante el uso de una firma ligeramente diferente). Agregar la anotación le dice al compilador que genere un error si este método no está anulando el comportamiento.
Como tal, tiene perfecto sentido como una anotación.
fuente