Я играл с примерами от http://www.concretepage.com/java/jdk-8/java-8-unaryoperator-binaryoperator-example.Нестатический метод не может ссылаться на статический контекст в java 8 потоках
Что я нахожу действительно заблуждение в том, что, когда я по ошибке поставил неправильный тип в один из дженериков при формировании Коллекторы, Java компилятор дает мне очень обманчивое сообщение:
Non-статический метод не может ссылаться из статический контекст
Моя ошибка не имеет ничего общего со статическим против контекста, например, в реальности:
Map<String, Map<Integer, Integer>> mapOfStudents = list.stream().collect(Collectors.groupingBy(Student::getClassName,
Collectors.toMap(Student::getName, Student::getAge)));
Мой м istake имеет общий тип возврата. Когда я исправлю его и поставлю:
Map<String, Map<String, Integer>> mapOfStudents
все возвращается в норму.
Может кто-нибудь объяснить причину такого запутанного сообщения об ошибке? Я уверен, что это хороший, но я не понимаю.
EDIT:
~$ java -version
openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-0ubuntu1.16.04.2-b13)
OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)
Я получаю совсем другое сообщение с 'javac' (гораздо яснее).Хотя у меня были подобные сообщения об ошибках в Eclipse при использовании ссылок на методы/lambdas. –
Просьба указать точный make и версию java-компилятора, поскольку вывод типа - это одна из вещей, которая менялась довольно часто. – biziclop
Подробнее см. В разделе «Редактирование». Я запускаю Intellij Idea 2016.3 – yuranos87