小编典典

Java 8 中使用的功能接口是什么?

all

我在 Java 8 中遇到了一个新术语:“函数式接口”。 在使用lambda 表达式 时,我只能找到它的一种用途。

Java 8
提供了一些内置的功能接口,如果我们想定义任何功能接口,那么我们可以使用@FunctionalInterface注解。它将允许我们在接口中只声明一个方法。

例如:

@FunctionalInterface
interface MathOperation {
    int operation(int a, int b);
}

除了使用lambda 表达式 之外,它在 Java 8 中还有多大用处?


阅读 65

收藏
2022-08-03

共1个答案

小编典典

@FunctionalInterface注释对于代码的编译时间检查很有用。static除了
之外,您不能拥有多个方法,default以及覆盖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();
}

但这会产生 编译错误

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

‘@FunctionalInterface’ 注释无效;Foo 不是函数式接口

2022-08-03