Java 8的回调机制

laz*_*ing 4 java closures callback java-8

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

    doSomethingAndRunThisCode(new Call() {

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

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

    });
Run Code Online (Sandbox Code Playgroud)

但我认为这不是全部.因为eclipse的代码complition,pre pre 8方式更容易.Eclipse在Java 8的实现方式上没有做任何事情(还).

Mat*_*att 5

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

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

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

public class MyClass { 
   void doSomething(Consumer<String> consumer) { }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我不确定eclipse,因为我没有使用最新版本,但我知道Intellij 13支持lambda语法.即使您没有使用java8,它也会将您的代码折叠成该语法以使其更易于阅读(不用担心,它不会以这种方式保存它,它只是一个展示的东西,如果需要你可以展开).