personalizar equal java java-8 javac

java - personalizar - logic equal struts



¿Por qué este código se compila con jdk8u45 y superior pero no con jdk8u25? (1)

Tuve problemas similares con las inferencias de tipo que se rompieron en algún lugar entre 8u5 y 8u25 y se solucionaron en 8u40. La lista de corrección de errores en 8u40 tiene algunas correcciones javac que tienen que ver con bugs.java.com/view_bug.do?bug_id=8033483 que es lo que creo que es su problema.

Aquí está la lista de todas las correcciones de errores en 8u40

Por favor, ¿podría alguien ayudarme a averiguar por qué el siguiente código se compila con jdk8u45 y superior pero falla con jdk8u25? Revisé las notas de la versión JDK pero no encontré nada relacionado con el problema o tal vez lo perdí.

El código

public class Main { static class Param { final int id; Param(int id) { this.id = id; } } static class Subtask { final Param param; Subtask(Param param) { this.param = param; } } public static void main(String[] args) { List<? extends Param> params = IntStream.range(1, 100).mapToObj(Param::new).collect(Collectors.toList()); NavigableMap<String, Subtask> map = params.stream() .collect(Collectors.toMap(p -> UUID.randomUUID().toString(), Subtask::new, (a, b) -> a, TreeMap::new)); } }

excepción jdk8u25

Error:(33, 17) java: no suitable method found for collect(java.util.stream.Collector<org.ka.Main.Param,capture#1 of ?,java.util.TreeMap<java.lang.String,org.ka.Main.Subtask>>) method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super capture#2 of ? extends org.ka.Main.Param>,java.util.function.BiConsumer<R,R>) is not applicable (cannot infer type-variable(s) R (actual and formal argument lists differ in length)) method java.util.stream.Stream.<R,A>collect(java.util.stream.Collector<? super capture#2 of ? extends org.ka.Main.Param,A,R>) is not applicable (cannot infer type-variable(s) R,A,capture#3 of ?,T,K,U,M,K,V (argument mismatch; java.util.stream.Collector<capture#2 of ? extends org.ka.Main.Param,capture#4 of ?,java.util.TreeMap<java.lang.Object,org.ka.Main.Subtask>> cannot be converted to java.util.stream.Collector<? super capture#2 of ? extends org.ka.Main.Param,capture#4 of ?,java.util.TreeMap<java.lang.Object,org.ka.Main.Subtask>>))