enable - reflection java class
Usando Java 7 Comparators en Java 8 (3)
Los nuevos métodos en la versión Java 8 de Comparator
son métodos predeterminados (una nueva característica en Java 8) que no solo incluyen la firma del método, sino también una implementación predeterminada. Por lo tanto, las implementaciones anteriores de Comparator
deberían funcionar bien en Java 8 si funcionaron antes.
Si algo no funciona, háganos saber qué está intentando y cuál es el mensaje de error.
Situación
Tengo un proyecto OSGi que estoy tratando de migrar a Java 8. En mi proyecto, tengo dependencias de bibliotecas de terceros que "OSGi-fied" (simplemente agregando el archivo MANIFEST.MF
y colocando metadatos en él). Estas bibliotecas están desprotegidas desde repositorios SVN de solo lectura, por lo que solo puedo desproteger actualizaciones cuando sea necesario y, por lo tanto, no quiero realizar ningún otro cambio que no sea el archivo MANIFEST.MF
, ya que no puedo confirmarlas.
Problema
Sin embargo, estas bibliotecas utilizan muchos comparadores anónimos como:
private static final Comparator heightComparator = new Comparator() {
public int compare (Object o1, Object o2) {
return ((Glyph)o1).getHeight() - ((Glyph)o2).getHeight();
}
};
Ahora, al parecer, la interfaz java.util.Comparator
tiene un montón de nuevos métodos que deben implementarse (lo que, por supuesto, conduce a errores de compilación). Pero realmente quiero evitar implementarlas o cambiar a expresiones Lambda porque la modificación de la fuente original probablemente generará conflictos cada vez que reviso las revisiones más recientes.
Java solía trabajar duro en la compatibilidad con versiones anteriores y me pregunto por qué una parte tan simple y ampliamente utilizada de la API necesita tanto esfuerzo (relativamente) para migrar. ¿Me estoy perdiendo algo o es realmente inevitable?
Tuve un problema similar como thobens: Actualicé mi Kepler 4.2.3 para usar Java 8, configuré JAVA 8 como nuevo JRE, etc. Como thobens, obtuve un error en los Comparadores al solicitarme que implementara todos los métodos no implementados.
Finalmente, esto fue causado por el antiguo nivel de compilación Compilador (1.7) - el cambio a 1.8 resolvió este problema.
eso sucede porque para Java 7 Comparator no tenía todos los otros métodos, cuando actualiza Eclipse a Java 1.8, se necesitan los nuevos métodos para usar Comparator, para resolver esto solo al cambiar el Compilador a Java 1.7 (propiedades - Java Compilador --- Conformidad con JDK), actualice su proyecto y espere que esto le ayude.