Java8中的这语法 为什么可以这么写?
final CompletableFuture<Class> classCompletableFuture = CompletableFuture.supplyAsync(() -> { final Class aClass = loader.parseClass(s, generateScriptName());
return aClass;
}, Runnable::run);
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor) {
return asyncSupplyStage(screenExecutor(executor), supplier);
}
问题: 第一段代码中传递了 Runnable::run 函数,Runnable是接口,run方法是抽象方法。
而supplyAsync方法签名中第二个参数是Executor, Runnable::run能作为Executor吗?
回答:
方法引用有时候看着确实比较迷惑,拆开看就清楚了
Executor executor1 = new Executor() { @Override
public void execute(Runnable command) {
command.run();
}
};
Executor executor2 = runnable -> runnable.run();
Executor executor3 = Runnable::run;
回答:
Runnable::run 是一个 Consumer , 消费的是 Runnable , 那么 Executor 刚好符合这个接口
帮忙支持我的开源项目: https://gitee.com/sanri/sanri...
以上是 Java8中的这语法 为什么可以这么写? 的全部内容, 来源链接: utcz.com/p/944322.html