不能从 java 8 流中的静态上下文中引用非静态方法
我正在玩 http://www.concretepage.com/java/jdk-8/java-8-unaryoperator-binaryoperator-example 的例子。
我发现真正令人困惑的是,当我在形成收集器时错误地将错误的类型放入一个泛型中时,java编译器给了我一个非常误导性的信息:
不能从静态上下文中引用非静态方法
我的错误与现实中的静态与实例上下文无关:
Map<String, Map<Integer, Integer>> mapOfStudents = list.stream().collect(Collectors.groupingBy(Student::getClassName,
Collectors.toMap(Student::getName, Student::getAge)));
我的错误是在通用返回类型中。当我纠正它并把:
Map<String, Map<String, Integer>> mapOfStudents
一切恢复正常。
有人可以解释这种令人困惑的错误消息背后的原因吗?我确信这是一个好,但我无法理解它。
编辑:
~$ 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)