java - Java 8的回调机制

标签 java callback closures java-8

在 Java 8 中实现回调机制的最好和最简单的方法是什么? 是否可以轻松地用 lambda experission 替换内部类 decleration? 喜欢替换

    doSomethingAndRunThisCode(new Call() {

        @Override
        public void callback() {
            System.out.println("here I am called back");

        }
    });

doSomethingAndRunThisCode(() -> {
        System.out.println("here I am called back");

    });

但我认为这还不是全部。由于 eclipse 的代码编译,Java 8 之前的方式更加容易。 Eclipse 对 Java 8 的实现方式没有做任何事情(目前)。

最佳答案

是的,你可以替换内部类定义。只要您调用的方法所期望的接口(interface)有 1 个未实现的方法,您就可以使用 lambda 语法。

所以你上面做的是正确的。另外,正如有人指出的那样,有函数引用语法,但是您传递的函数引用必须具有可强制转换为您的接口(interface)的签名。例如,以 Consumer 接口(interface)为例:

public interface Consumer<T> {
   void accept(T t);
}

public class MyClass { 
   void doSomething(Consumer<String> consumer) { }
}

在这种情况下,您可以将任何函数引用传递给返回 void 的“doSomething”方法,并接受单个参数作为字符串。

即。 myClassInstance.doSomething(System.out::println);

我不确定 eclipse,因为我没有使用过最新版本,但我知道 Intellij 13 支持 lambda 语法。即使您不使用 java8,它也会将您的代码折叠成该语法以使其更易于阅读(别担心,它不会那样保存它,它只是一个演示文稿,您可以根据需要展开).

关于java - Java 8的回调机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164562/

相关文章:

java - 如何根据数据将一个数据流输出到不同的输出端?

javascript - 如何组合多个回调?专门用于BingMap模块加载

javascript - canvas 上下文 - 缓存 window.requestAnimationFrame 回调函数的变量值

javascript - JavaScript 闭包如何处理变量?

jquery - 仅 For-of-Loop 的最后一个值被传递给 JQuery click 函数

java - 三角形-三角形相交检测

java - 如何设计一个可能使用skip的返回流

javascript - 递归回调机制

Swift 直接定义并调用内联闭包

java - Java 中使用 Deque 的 pop() 问题