Имея следующий простой метод в Java 8:
public void test(){
Stream<Integer> stream = Stream.of(1,2,3);
stream.map(Integer::toString);
}
и я получаю две ошибки:
java: несовместимые типы: не может вызывать тип-переменные R (несоответствие аргумента, неверная ссылка метода
ссылка на toString неоднозначна оба метода toString (int) в java.lang.Integer и метод toString() в java.lang.Integer
и:
неверный метод ссылки нестатический метод toString() не может быть ссылка из статического контекста
Первая ошибка понятна, класс Integer имеет два метода:
public static String toString(int i)
public String toString()
и компилятор не может вывести желаемую ссылку на метод.
Но что касается второго, где статический контекст, на который ссылается компилятор?
Ошибка связана с методом toString() класса Integer, который не является статическим, но почему контекст, который я называю этим методом с использованием map(), является static?
Еще один вопрос: если компилятор должен решить двусмысленность между двумя методами, из-за которых возникает ошибка времени компиляции, он не должен выбирать другую?