在Java 8流中,非静态方法不能从静态上下文中引用。

16 浏览
0 Comments

在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)

0