【问题标题】:Java: method which receives pointer to other method (lambda)Java:接收指向其他方法的指针的方法(lambda)
【发布时间】:2015-01-26 19:18:16
【问题描述】:

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

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

这对我来说很清楚。
但是,我怎样才能创建一个需要这样的指针的方法呢?
它应该像在例如中那样工作吗? C++?还是我的期望太大了?

【问题讨论】:

    标签: java c++ methods reference lambda


    【解决方案1】:

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

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

    forEach 定义为:

    void forEach(Consumer<? super T> action)
    

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

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

    【讨论】:

    • 最常见的功能接口的简短列表会很棒。
    【解决方案2】:

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

    没有。那不是你正在做的事情。使用方法引用语法,您正在传递一个类的实例,该实例实现了一些目标功能接口,并带有引用的方法体。

    但是如何创建需要这样的指针的方法呢?

    您创建一个方法,其中参数是适当的功能接口类型。

    【讨论】:

      【解决方案3】:

      参数类型应该是函数式接口(@98​​7654321@):

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

      【讨论】:

        猜你喜欢
        • 2014-07-30
        • 1970-01-01
        • 2010-12-05
        • 2019-01-08
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 2021-10-12
        • 2017-04-13
        相关资源
        最近更新 更多