A New Start

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

一、概述

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

那么先聊下 Java 中的接口:

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

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

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

FunctionalInterface01.png

二、特性

函数式接口的特性是:

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

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

注意:

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

FunctionalInterface02.png

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

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

三、服务

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

FunctionalInterface03.png

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

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

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注