В этом коде у меня ошибка во второй строке, а первая успешно компилируется:
Comparator<? super Integer> a = (x, y) -> Integer.compare(x, y);
Comparator<? super Integer> b = a.thenComparing((x, y) -> Integer.compare(x, y));
Ошибка: "несовместимые типы: объект не может быть преобразован в int"
thenComparing
имеет следующую подпись: thenComparing(Comparator<? super T> other)
, поэтому, как я понимаю, other
в этом контексте станет чем-то вроде Comparator<? super super T>
или Comparator<? super super Integer>
.
Почему в моем примере это становится Comparator<Object>
?
Это недостаток компилятора или он меня от чего-то защищает?