【发布时间】:2018-04-28 23:24:11
【问题描述】:
最近我开始阅读有关 java8 特性的内容,我遇到的一个这样的特性是
默认方法
,就概念而言,没有什么独特之处,但我偶然发现了这段代码 sn-p,它使用 lambda 表达式从默认方法返回值(void)。但我看到默认的返回类型方法的类型是 interface.(我认为应该是 void),因为默认方法中的逻辑不返回任何内容,现在我对这种行为感到困惑,因为我没有看到任何编译错误,但是当我将默认方法的类型设置为 void 时,编译器 spouts(此表达式的目标类型必须是函数接口) 错误。有人可以向 lambda 用法解释这种行为吗?
public interface Op {
void runOp();
static void timeOperation(Op testOp) {
}
default Op combinedOp(Op secondOperation) {
return ()->{secondOperation.runOp();};
}
}
【问题讨论】:
-
它不返回 void,它返回一个 lambda 表达式
-
附带说明,您返回的函数实际上并没有组合操作,因为它只评估
secondOperation,所以它与只返回@没有什么不同987654323@。也许,你想要return () -> { this.runOp(); secondOperation.runOp(); };...