首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 8接口默认方法返回类型不清楚

java 8接口默认方法返回类型不清楚
EN

Stack Overflow用户
提问于 2018-04-28 23:24:11
回答 2查看 2K关注 0票数 4

最近,我开始阅读关于java8特性的文章,其中一个类似的特性是

默认方法

在概念方面没有什么独特之处,但是我偶然发现了这个代码片段,它使用lambda表达式从默认的method.but返回值( void)。我看到默认方法的返回类型是类型接口(我认为它应该是空的),因为默认方法中的逻辑不返回任何东西,现在我对这种行为感到困惑,因为我没有看到任何编译错误,但是当我将默认方法的类型设置为void时,编译器输出(这个表达式的目标类型必须是一个函数接口)错误。有人能向lambda的用法解释一下这种行为吗?

代码语言:javascript
复制
public interface Op {
void runOp();
static void timeOperation(Op testOp) {

}

 default Op combinedOp(Op secondOperation) {
    return ()->{secondOperation.runOp();};
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-28 23:55:38

您可以使用包含单个抽象方法实现的匿名类以非lambda的方式编写lambda表达式。

应用到示例中,可以编写方法。

代码语言:javascript
复制
default Op combinedOp(Op secondOperation) {
    return ()->{secondOperation.runOp();};
}

以一种非蓝氏的方式:

代码语言:javascript
复制
default Op combinedOp(Op secondOperation) {
    return new Op() {
        @Override
        public void runOp() {
            secondOperation.runOp();
        }
    };
}

现在可以更清楚地看到,combinedOp方法返回某些内容,即Op接口的实例。

但是,此实例的runOp方法不返回任何内容。因此,它的返回类型是void

票数 3
EN

Stack Overflow用户

发布于 2018-04-28 23:34:42

Op是一个功能接口,即与SAM (单一抽象方法)的接口。

combinedOp是一个默认的方法,它以一个Op作为参数,并返回一个Op,而不是空的。在Java中,函数接口可以用作lambda表达式或方法引用的目标类型,因此下面的代码是完全有效的:

代码语言:javascript
复制
default Op combinedOp(Op secondOperation) {
    return ()->{secondOperation.runOp();};
}

此代码使用一个Op,然后该secondOperation返回一个函数,当调用该函数时,该函数将执行secondOperation函数。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50081946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档