Java 8中使用了哪些功能接口?
我在Java 8中遇到了一个新术语:“功能接口”。在使用lambda表达式时,我只能找到它的一种用法。
Java 8提供了一些内置的功能接口,如果我们想定义任何功能接口,则可以使用@FunctionalInterface
注释。它将允许我们在接口中仅声明一个方法。
例如:
@FunctionalInterfaceinterface MathOperation {
int operation(int a, int b);
}
除了仅使用lambda表达式以外,它在Java 8中还有什么用?
(这里的问题与我问的问题不同。它问的是为什么在使用lambda表达式时我们需要功能接口。我的问题是:为什么功能接口除了lambda表达式之外还有其他用途?)
回答:
@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();
}
但这会产生编译错误:
@FunctionalInterfacepublic interface Foo {
public void doSomething();
public void doSomethingElse();
}
无效的“ @FunctionalInterface”注释;Foo不是功能界面
以上是 Java 8中使用了哪些功能接口? 的全部内容, 来源链接: utcz.com/qa/405003.html