在Java 8流中,非静态方法不能从静态上下文中引用。
- 论坛
- 在Java 8流中,非静态方法不能从静态上下文中引用。
16 浏览
在Java 8流中,非静态方法不能从静态上下文中引用。
我在 http://www.concretepage.com/java/jdk-8/java-8-unaryoperator-binaryoperator-example 的例子中进行了一些尝试。
我发现真正令人困惑的是,当我在形成Collectors时,错误地将错误的类型放入其中一个泛型中时,Java编译器给出了一个非常误导人的消息:
非静态方法无法从静态上下文中引用
实际上,我的错误与静态上下文与实例上下文无关:
Map> mapOfStudents = list.stream().collect(Collectors.groupingBy(Student::getClassName, Collectors.toMap(Student::getName, Student::getAge)));
我的错误在于泛型的返回类型。当我纠正它并且将:
Map> 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)