我有以下代码:
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 ×1