Desde la version 5 de Java tenemos la posibilidad de anotar nuestro codigo, a estas alturas todos conocemos las anotaciones, las hemos usado o sencillamente la hemos visto en ejemplos de frameworks o en codigo de nuestros amigos. Son esas @Cosas que vemos antes de clases, campos o metodos. Aunque se puede decir que las anotaciones han sido utiles, porque la mayoria de los frameworks las usan, dentro de JSE, son realmente muy pocas, las mas comunes: @Override y @SupressWarning.
La noticia es que Java7 incluira el paqueta javax.annotation con muchas nuevas (algunas muy buenas) anotaciones. Basicamente se incluiran anotaciones para los siguientes contextos:
- Anotaciones para el lenguaje
- Precondiciones
- Uso adecuado de APIs
- I/O
- Seguridad
- Concurrencia
En las anotaciones para el lenguaje tendremos por ejemplo @NonNull (ojo es diferente a @NotNull), cuando se utiliza el compilador verifica que si el campo anotado es nulo es porque algo anda mal y notifica al programador. Un uso comun seria en los compareTo
public int compareTo(@Nonnull Integer anotherInteger)
{
int thisVal = this.value;
int anotherVal = anotherInteger.value;
return (thisVal < anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
}
O tambien @CheckForNull, @Nullable. En el caso d la anotaciones para precondiciones existiran:
- Signed
- Nonnegative
- MatchesPattern
- Syntax
La @Sytanx por ejemplo se podra usar en metodo que retornen una String y esa deba estar formateada siguiendo alguna sintaxis. Por ejemplo @Syntax("HTML") o @Syntax("Groovy") Hay muchas otras como @Inmutable, @WillClose para IO @ThreadSafe, @GuardedBy para seguridad y muchas mas que pueden encontrar en. http://today.java.net/pub/a/today/2008/09/11/jsr-305-annotations.html Mi duda ahora es: "¿Bienvenidos al Annotations Hell?" es cierto que algunas de esas anotaciones podrian reducir el trabajo del programador y dejar muchas cosas en mano del compilador y del JRE, el miedo esta en llegar al punto de ver cosas como:
@Class("Empleado")@Extends(@Class("Persona"))
@UseDatabase(@JNDI("jdbc/myCon"))
@Require@NonNull@ThradSafe@ Method("sayHello")@NeedWebAccess(@Mode("JSF"),@AlternateMode("WebServices"))
@CanExport(@Language("Ruby"))
public class @Class("name"){
}Sencillamente sera el fin de Java como lenguaje, porque como siempre he dicho, la plataforma esta hecha para durar muuucho tiempo mas usando cualquier otro lenguaje jejej.