Java 8的回调机制

时间:2014-04-19 00:57:34

标签: java callback closures java-8

在java 8中实现回调机制的最佳和最简单的方法是什么? 是否可以用lambda经验轻松取代内部的等级变化? 喜欢替换

    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的代码complition,pre pre 8方式更容易。 Eclipse在Java 8的实现方式上没有做任何事情(还)。

1 个答案:

答案 0 :(得分:5)

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

所以你上面所做的是正确的。此外,正如有人指出的那样,有函数引用语法,但您传递的函数引用必须具有可对您的接口强制执行的签名。例如,使用Consumer接口:

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,它也会将您的代码折叠成该语法以使其更易于阅读(不用担心,它不会保存它,它只是一个展示的东西,如果需要你可以展开)。