Java:接收指向其他方法(lambda)的指针的方法

Java: method which receives pointer to other method (lambda)

本文关键字:方法 lambda 指针 其他 Java      更新时间:2023-10-16

最近我一直在尝试熟悉 Java 8 中 lambda 的用法。
我发现我可以向某个方法传递指向另一个方法的指针,如下所示:

List<Integer> numbers = asList(1,2,3,4,5,6,7,8,9);
forEach(System.out::println, numbers);

这对我来说很清楚。
但是,如何创建需要此类指针的方法?
它应该像例如一样工作。C++?或者也许我的期望太大了?

期望方法引用的方法使用函数接口作为其集合。

举个例子numbers.forEach(System.out::println);

forEach 定义为:

void forEach(Consumer<? super T> action)

这意味着它需要一个符合 Consumer 函数接口的单个方法的方法引用或 lambda 表达式。

Consumer<T>只有一个方法——void accept(T t)。这意味着它需要一个需要单个参数且没有返回值的方法。 System.out::println符合此要求。

我可以传递给某个方法,指向另一个方法

不。那不是你正在做的。使用方法引用语法,将传递一个类的实例,该类使用引用的方法的主体实现某个目标函数接口。

但是如何创建期望这种指针的方法呢?

创建参数为相应功能接口类型的方法。

参数类型应为函数接口 (§9.8):

除了通过声明和实例化类来创建接口实例的常规过程 (§15.9) 之外,还可以使用方法引用表达式和 lambda 表达式 (§15.13、§15.27) 创建函数接口实例。