小编Mat*_*isz的帖子

为什么在这种情况下使用方法引用而不是 lambda 会导致编译错误?

我有以下代码:

final var fieldValuesStream = items.stream()
                .map(person -> PersonFieldGetter.getFieldValueAsNumber(functionsParameters.getFieldName(), person)) // Number
                .mapToDouble(number -> number.doubleValue());
Run Code Online (Sandbox Code Playgroud)

IDEA 突出显示“number -> number.doubleValue()”并显示以下消息:

Lambda 可以替换为方法引用
将 Lambda 替换为方法引用

但是当我将代码更改为.mapToDouble(Number::doubleValue)编译错误时发生:

QueryProcessor.java:31:34 java: 不兼容的类型:类 java.lang.Number 中的无效方法引用方法 doubleValue 无法应用于所需的给定类型:未找到参数:java.lang.Object 原因:实际参数列表和形式参数列表不同长度

完整源代码
为什么会发生这种情况?

重现问题的项目

编辑:添加了 GitHub 项目的链接,其中包含无法使用以下命令构建的示例项目:

IntelliJ IDEA 2021.2.3 (Ultimate Edition)
Build #IU-212.5457.46,构建于 2021 年 10 月 12 日
运行时版本:11.0.12+7-b1504.40 amd64
VM:OpenJDK 64 位服务器 VM by JetBrains sro
SDK:Oracle OpenJDK 17.0.1

java

8
推荐指数
1
解决办法
366
查看次数

标签 统计

java ×1