Oracle ha introducido un bug en Java 7 Update 51 que está rompiendo aplicaciones
Recientemente Oracle ha anunciado una versión nueva de Java 7, la Update 51, que contiene bastantes parches de seguridad. En esta nueva versión ha cambiado la implementación de la clase sun.reflect.generics.reflectiveObjects. TypeVariableImpl. Por algún motivo que no comprendo completamente, el método equals de esta clase no seguían las prácticas estándares en Java de comprobar si el objeto que se le pasa es exactamente de la misma clase que la clase del objeto sobre el que se ha invocado el método. Así es como solía comenzar el método hasta la Update 51:
@Override 158 public boolean equals(Object o) { 159 if (o instanceof TypeVariable) { 160 TypeVariable that = (TypeVariable) o;
Código que ahora ha sido cambiado para comprobar si el objeto que se le pasa es una instancia de TypeVariableImpl. Y esto está provocando fallos en varias aplicaciones, siendo probablemente el más notorio la librería Guava de Google (es bastante ilustrativo leer los comentarios en este post), así como muchas otras librerías que dependen de Guava. Este problema ya ha sido recogido en el bug traking de OpenJDK.
Hasta que este tema se resuelva, está bien tenerlo en la cabeza por si está rompiendo directamente tu código, o está rompiendo alguna librería de la que depende es.
Reader Comments (2)
bueno, "no es un bug, es una feature" ;-)
los paquetes sun.* ... "are considered to be implementation details, and they are not part of the JDK API. They can change arbitrarily between versions, so they can cause problems when you try to upgrade JDK versions"
Jor.
Ese argumento se aplica cuando tú usas directamente el paquete. Pero en este caso, tú puedes llamar algún otro método del JDK que termina invocando a este método y falla tu código. Y no creo que en Guava use directamente este método…