为了账号安全,请及时绑定邮箱和手机立即绑定

Java 8中函数接口的用途是什么?

Java 8中函数接口的用途是什么?

蓝山帝景 2019-08-03 07:03:49
Java 8中函数接口的用途是什么?我遇到了一个新名词功能接口在Java 8中。在使用时,我只能找到这个接口的一种用法。Lambda表达式.Java 8提供了一些内置的函数接口,如果我们想定义任何函数接口,那么我们可以使用@FunctionalInterface注释它将允许我们在接口中只声明一个方法。例如:@FunctionalInterfaceinterface MathOperation {     int operation(int a, int b);}它在Java 8中有多有用,而不仅仅是使用Lambda表达式?问题这里和我问的不一样。它在问为什么我们需要功能接口在使用Lambda表达式时。我的问题是:为什么要用功能接口除了直接与Lambda表达式?
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

@FunctionalInterface注释对于代码的编译时间检查非常有用。除了一种方法之外,您不能有更多的方法。staticdefault中覆盖方法的抽象方法。Object在你的@FunctionalInterface或任何其他用作功能接口的接口。

但是,您可以在没有此注释的情况下使用lambda,也可以在没有此注释的情况下重写方法。@Override注释

从医生那里

一个功能接口正好有一个抽象方法。因为默认方法有实现,所以它们不是抽象的。如果接口声明了一个覆盖java.lang.Object的公共方法的抽象方法,那也不算在接口的抽象方法计数中,因为接口的任何实现都将有来自java.lang.Object或其他地方的实现。

这,这个可以使用在lambda表达式中:

public interface Foo {
  public void doSomething();}

这,这个不能使用在lambda表达式中:

public interface Foo {
  public void doSomething();
  public void doSomethingElse();}

但这会给编译错误:

@FunctionalInterfacepublic interface Foo {
  public void doSomething();
  public void doSomethingElse();}

无效的@FunctionalInterface注释;foo不是函数接口




查看完整回答
反对 回复 2019-08-05
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

这个文献资料确实在目标之间起了很大的作用

一种信息丰富的注释类型,用于指示接口类型声明的意图是功能接口由Java语言规范定义。

和用例

注意,函数接口的实例可以使用lambda表达式、方法引用或构造函数引用创建。

其措辞并不排除一般的其他用例。因为主要目的是表示功能接口,你的实际问题归结为“是否有其他用例用于功能接口除了lambda表达式和方法/构造函数引用之外?“

功能接口是Java语言规范定义的Java语言结构,只有该规范才能回答这个问题:

JLS第9.8节。功能接口:

除了通过声明和实例化类来创建接口实例的通常过程(§15.9)之外,还可以使用方法引用表达式和lambda表达式创建函数接口实例(§15.13,§15.27)。

因此,Java语言规范没有这样说,该部分中提到的唯一用例是使用方法引用表达式和lambda表达式创建接口实例。(这包括构造函数引用,因为它们是规范中方法引用表达式的一种形式)。

所以在一个句子中,不,在Java 8中没有其他的用例。



查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 290 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信