栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法从Java 8流中的静态上下文引用非静态方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法从Java 8流中的静态上下文引用非静态方法

首先应该注意,该消息不是由Java编译器(javac)发出的,而是由IntelliJ
IDEA发出的。实际启动构建过程时,可以在“消息构建”窗口中看到javac消息。您在编辑器窗口中看到的是IDEA本身生成的消息,它们可能有所不同。

由于在IntelliJ IDEA中实现了方法引用解析,因此错误消息具有误导性。仅当相应的SAM(单个抽象方法)参数的数量等于方法参数的数量加一个
第一个SAM参数类型与包含类的方法兼容时,才认为可以解析非静态方法引用。请参阅实现(另请参见

isSecondSearchPossible
上面的方法,对varargs方法执行了一些附加的操作)。

如果您的程序没有错误,它将正常工作。但是,如果您有一个不匹配的类型,则无法替换

Function
传入的泛型参数
toMap
,因此它仍然存在
Function<T,R>
,并且其
apply
方法的第一个参数就是
T
与该类型不对应的第一个参数
Student
。因此,所谓的“第二次搜索”失败了,IDEA认为该方法是从静态上下文中引用的。虽然静态和非静态上下文都不适用于此处,但非静态上下文至少可以根据参数的数量更好地匹配您的方法,因为
getName()
方法不接收任何参数。另一方面,IDEA逻辑是“如果非静态上下文不适用,则为静态上下文”,因此显示错误消息。

我认为这是一个错误,或者至少是一个可用性问题。基于类似的问题,我刚刚将其记录在这里。希望我们会修复它。

免责声明:我是IntelliJ IDEA开发人员。

更新 :在IDEA 2017.2。中修复



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/428457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号