Вот минимальный пример кода, с которым я работаю:
public class Temp {
enum SomeEnum {}
private static final Map<SomeEnum, String> TEST = new EnumMap<>(
Arrays.stream(SomeEnum.values())
.collect(Collectors.toMap(t -> t, a -> "")));
}
Вывод компилятора:
Temp.java:27: error: cannot infer type arguments for EnumMap<>
private static final Map<SomeEnum, String> TEST = new EnumMap<>(Arrays.stream(SomeEnum.values())
^
Я обнаружил, что это можно обойти, заменив t → t
на Function.identity()
или (SomeEnum t) → t
, но я не понимаю, почему это так. Какое ограничение в javac вызывает такое поведение?
Первоначально я обнаружил эту проблему с Java 8, но подтвердил, что она по-прежнему происходит с компилятором Java 11.