Java:接收指向其他方法(lambda)的指针的方法
Java: method which receives pointer to other method (lambda)
最近我一直在尝试熟悉 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) 创建函数接口实例。
相关文章:
- 常量方法中的非常量 lambda 捕获
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 如何在Visual Studio 2017上将类方法设置为参数并将它们与lambda一起使用?
- 将lambda放入类定义中的干净方法
- 使用 lambda 比较初始化优先级队列的方法
- 有没有优雅的方法可以在多态 lambda 中编写类型别名
- 有没有一种单行方法来调用集合上的 lambda 函数
- C++ lambda 作为类方法
- C++;类方法指针;λ;将 lambda 作为成员函数指针传递;
- 在C 11或更高版本中,是否可以通过Lambda来实现单方法纯Virtual C 接口
- 是否有一种方法可以编写此短片而不捕获lambda变量
- 是否有记录在案的方法可以在现有 std::exponential_distribution 对象上重置 lambda 参
- 在类方法内调用lambda函数中的类方法
- 在lambda中使用静态方法的错误
- C++在虚拟方法中使用捕获 lambda
- 我如何编写看起来像方法的lambda表达式
- 接受 lambda 作为参数的类方法 - 错误消息
- 类方法接受表示各种参数数函数的 lambda
- 在lambda [C ]中捕获这一点的替代方法
- Java:接收指向其他方法(lambda)的指针的方法