当前位置: 首页 > 知识库问答 >
问题:

实例方法引用和Lambda参数

贺雪松
2023-03-14
Arrays.sort(personArray, comparators::compareByName);

相当于

Arrays.sort(personArray, (o1, o2) -> comparators.compareByName(o1, o2));

因为在这种情况下,lambda参数与方法调用参数(o1,o2)匹配。

然而对于这只小羊来说

stream.sorted((o1, o2) -> o1.compareToIgnoreCase(o2));
stream.sorted(String::compareToIgnoreCase);

例如,如果lambda有三个或更多的参数怎么办?那合法吗?是否第一个参数成为方法目标,其余的参数成为参数?

共有1个答案

能可人
2023-03-14

我想您正在查找JLS第15.13.3节,其中包括:

如果窗体为referenceType::[TypeArguments]identifier,则调用方法的主体类似地具有编译时声明的方法调用表达式的效果,编译时声明是方法引用表达式的编译时声明。方法调用表达式的运行时评估如§15.12.4.3、§15.12.4.4和§15.12.4.5中所规定,其中:

>

  • 调用模式源自§15.12.3中指定的编译时声明。

    如果编译时声明是实例方法,那么目标引用就是调用方法的第一个形参。否则,就没有目标引用。

    注意最后两颗子弹,基本上。

    例如,如果lambda有三个或更多的参数怎么办?那合法吗?是否第一个参数成为方法目标,其余的参数成为参数?

    是的:)

  •  类似资料:
    • 问题内容: 我对“引用特定类型的任意对象的实例方法”背后的概念感到困惑。Oracle 文档提供了有关此示例: 我为这种方法参考所见的大多数示例都是这样的:如果lambda是like,那么您可以编写like 。文档中的示例说: 方法参考String :: compareToIgnoreCase的等效lambda表达式将具有形式参数列表(字符串a,字符串b),其中a和b是用于更好地描述此示例的任意名称

    • 我对“引用特定类型的任意对象的实例方法”背后的概念感到困惑。Oracle留档有一个例子: 我看到的这种方法参考的大多数示例是这样的:如果lambda像:

    • 本文向大家介绍Java中使用lambda和方法引用实现IntToLongFunction,包括了Java中使用lambda和方法引用实现IntToLongFunction的使用技巧和注意事项,需要的朋友参考一下 IntToLongFunction 是java.util.function包中的内置功能接口。该功能接口接受一个 int值的 参数,并产生一个long值的结果。IntToLongFunct

    • 本文向大家介绍Java中使用lambda和方法引用实现LongToIntFunction,包括了Java中使用lambda和方法引用实现LongToIntFunction的使用技巧和注意事项,需要的朋友参考一下 LongToIntFunction 是Java 8 中引入的java.util.function包的功能接口。该功能接口接受long值参数作为输入,并产生一个(int)整数值的结果。Lon

    • 本文向大家介绍Java中如何使用lambda和方法引用实现LongToDoubleFunction,包括了Java中如何使用lambda和方法引用实现LongToDoubleFunction的使用技巧和注意事项,需要的朋友参考一下 LongToDoubleFunction 是一个内置的函数接口,是 java.util.function 包的一部分。这个函数接口接受长值参数作为输入,并生成双值结果。

    • 本文向大家介绍如何在Java中使用lambda和方法引用实现IntToDoubleFunction,包括了如何在Java中使用lambda和方法引用实现IntToDoubleFunction的使用技巧和注意事项,需要的朋友参考一下 IntToDoubleFunction 是java.util.function包中的功能接口。该功能接口接受一个int值的参数并产生一个double值的结果。IntTo