嘎里三分熟
  • 首页
  • JMusic
  • TSBay
  • 常用工具
  • About Me
  • 留言板
一行代码一世浮生
  1. 首页
  2. Java基础
  3. 正文

Java 8特性(一)——函数式接口(FunctionalInterface)

2017年08月04日 2020点热度 2人点赞 0条评论

一、概述

函数式接口,顾名思义,万变都离不开接口这个身世。

那么先聊下 Java 中的接口:

首先,接口的设计一般是用于定义对象的扩展功能,而写法,接口内部也有且只能有若干个抽象方法。

但那些都是远古时期的啦(1.7及以前版本)。

而在 1.8 这个小小跨时代的版本之下,接口内部除了抽象方法,还能写有实现的静态方法和默认方法等,简单的例子就是 Comparator 这个接口,部分代码如下:

FunctionalInterface01.png

二、特性

函数式接口的特性是:

1、接口内部只能写一个抽象方法

2、抽象方法和静态方法的数量不限制

注意:

正如上文所提到的 Comparator 接口,也许你会好奇,如下图:

FunctionalInterface02.png

怎么会存在两个抽象方法?

其实 easy,这两个抽象方法是复写了顶级父类 Object 中的方法,而像这种父类的抽象方法,其实不在【唯一的抽象方法】限制内。

三、服务

其实,这个 FunctionalInterface 注解,是可有可无的,而它存在的目的,主要是用于 编译级错误检查,即,当你敲代码的时候,如果一个加了这个注解的接口内部的抽象方法不唯一会没有,它便会报异常,如下图:

FunctionalInterface03.png

所以总结:加不加 @FunctionalInterface 对于接口是不是函数式接口没有影响,该注解只是提醒编译器去检查该接口是否仅包含一个抽象方法

另外,其实这个函数式接口的设计,最最最最主要的,是为 Lambda 表达式服务的,至于 Lambda 表达式是什么,请点击 传送门。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: FunctionalInterface JDK1.8新特性 Lambda
最后更新:2017年08月04日

GoldenJet

爱折腾技术的90后漫威小死忠程序员一枚

点赞
< 上一篇
下一篇 >

文章评论

取消回复

通过电子邮件订阅博客

分类目录
  • BootStrap (2)
  • Bug集中营 (6)
  • Java web (3)
  • JavaScript (7)
  • Java基础 (17)
  • Java工具 (5)
  • Linux (3)
  • Python (3)
  • SpringBoot (14)
  • Spring基础 (8)
  • thymeleaf (1)
  • 娱乐 (3)
  • 小谈 (2)
  • 常用工具 (7)
  • 技术分析集 (5)
  • 技能 (10)
  • 源码 (4)
  • 科普类 (1)
  • 算法 (9)
  • 踩坑记 (5)
文章归档
  • 2020年11月 (1)
  • 2020年7月 (1)
  • 2020年4月 (2)
  • 2020年3月 (1)
  • 2020年1月 (1)
  • 2019年11月 (1)
  • 2019年10月 (1)
  • 2019年9月 (1)
  • 2019年8月 (1)
  • 2019年7月 (2)
  • 2019年5月 (2)
  • 2019年4月 (2)
  • 2019年3月 (3)
  • 2019年2月 (2)
  • 2019年1月 (2)
  • 2018年12月 (2)
  • 2018年11月 (3)
  • 2018年10月 (3)
  • 2018年9月 (2)
  • 2018年8月 (3)
  • 2018年7月 (2)
  • 2018年5月 (1)
  • 2018年4月 (3)
  • 2018年3月 (2)
  • 2018年2月 (3)
  • 2018年1月 (5)
  • 2017年12月 (2)
  • 2017年11月 (3)
  • 2017年10月 (1)
  • 2017年9月 (1)
  • 2017年8月 (1)
  • 2017年7月 (7)
  • 2017年6月 (5)
  • 2017年5月 (1)
  • 2017年4月 (2)
  • 2017年3月 (4)
  • 2017年2月 (2)
小伙伴友链
  • 前端驿站

COPYRIGHT © 2017-2020 嘎里三分熟. ALL RIGHTS RESERVED.

浙ICP备17005575号-1

浙公网安备 33010802009043号