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

时间:2014-11-28 06:54:26

标签: java c++ methods reference lambda

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

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

这对我来说很清楚 但是,如何创建一个需要这种指针的方法? 它应该像在例如。 C ++?或许我的期望太大了?

3 个答案:

答案 0 :(得分:3)

期望方法引用的方法使用功能接口作为它们的批评。

例如numbers.forEach(System.out::println);

forEach定义为:

void forEach(Consumer<? super T> action)

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

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

答案 1 :(得分:2)

  

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

没有。那不是你在做什么。使用方法引用语法,您将传递一个类的实例,该类实现了一些目标功能接口和引用方法的主体。

  

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

您可以创建一个参数具有适当功能接口类型的方法。

答案 2 :(得分:0)

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

  

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