在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的实现方式上没有做任何事情(还)。
答案 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,它也会将您的代码折叠成该语法以使其更易于阅读(不用担心,它不会保存它,它只是一个展示的东西,如果需要你可以展开)。