在 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/