我在Java 8中遇到了一个新术语:“功能接口”。在使用lambda表达式时,我只能找到它的一种用法。
Java 8提供了一些内置的功能接口,如果我们想定义任何功能接口,则可以使用@FunctionalInterface
注释。它将允许我们在接口中仅声明一个方法。
例如:
@FunctionalInterface
interface 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();
}
但这会产生编译错误:
@FunctionalInterface
public interface Foo {
public void doSomething();
public void doSomethingElse();
}
无效的“ @FunctionalInterface”注释;Foo不是功能界面
还是这些标准的功能接口(消费者、供应商、谓词、函数)是用来充当代码组织、可读性、结构、[其他]的模板?
问题内容: 关于Java8 内置 功能接口,我遇到了许多问题,包括this,this和this。但是所有人都问“为什么只有一种方法?” 或“如果使用功能接口执行X,为什么会出现编译错误”等。我的问题是: 当我仍然可以在自己的接口中使用lambda时,这些新功能接口的存在目的 是 什么 ? 考虑一下oracle文档中的以下示例代码: 好的,很好,但这可以通过上面自己的示例来实现(带有单个方法的接口已
本文向大家介绍Redis 有哪些功能?相关面试题,主要包含被问及Redis 有哪些功能?时的应答技巧和注意事项,需要的朋友参考一下 数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列
1、基于本机内存的缓存 当调用api访问数据库时,假如此过程需要2秒,如果每次请求都要访问数据库,那将对服务器造成巨大的压力,如果将此sql的查询结果存到Redis中,再次请求时,直接从Redis中取得,而不是访问数据库,效率将得到巨大的提升,Redis可以定时去更新数据(比如1分钟)。 2、如果电脑重启,写入内存的数据是不是就失效了呢,这时Redis还提供了持久化的功能。 3、哨兵(Sentin
本文向大家介绍zookeeper 都有哪些功能?相关面试题,主要包含被问及zookeeper 都有哪些功能?时的应答技巧和注意事项,需要的朋友参考一下 集群管理:监控节点存活状态、运行请求等。 主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举的过程,使用 zookeeper 可以协助完成这个过程。 分布式锁:zookeeper 提供两种锁:独占锁、共享锁。独占
更准确地说,函数接口定义为具有一个抽象方法的任何接口。 然后他继续介绍示例,其中一个是接口: 我能够测试是否可以使用lambda函数代替比较器参数,并且它能够工作(例如)。