首页 > 科技 > 正文

Java8特性:函数式接口
2019-10-27 11:31:30   来源:东方头条   

Java自诞生已经有十几个年头了,目前也已经发布了第十三个大版本,其中Java8是常用的版本中最新的一个版本。而Java8最大的特性就是:Lambda表达式、函数式接口和Stream流。

本篇我只讲讲函数式接口的概念,因为将所有东西放在一篇文章会显得臃肿。废话不多说,下面进入正题。

何为函数式接口?函数接口就是有且只有一个抽象方法的接口,被@FunctionInterface注解修饰的接口。下面我放一个JDK提供的函数式接口图:

Runnable接口

Callable接口

没错,这就是我们实现多线程时候常用的线程任务体-“Runnable”和“Callable”接口。当然,本篇中我无意将这两个接口,这里只是用来举个例子。接下来我就详细聊聊函数式接口。

我想接口是啥就不用多费口舌了吧?如果是Java开发者,对于接口的概念及使用定能信手拈来。这里我只解释一下什么叫“有且只有一个抽象方法”。

Java8之前,接口中只可以存在抽象方法,虽然大多数情况,大家都不会手动声明。但是自Java8开始,接口中可以存在被“default”关键字修饰的方法和静态方法,比如下面这样:

Comparator接口

虽然此时在接口中有多个方法,但是抽象方法只有一个,此时该接口依然是函数式接口。判别是否是函数式接口的关键在于抽象方法的个数。至于别的如默认方法、静态方法的个数都无须关心。

至于@FunctionInterface注解是Java8之后新增注解,可以对接口是否属于函数式接口做一个约束。原则上,“有且只有一个抽象方法”的接口是函数式接口,但是JDK的版本是不断迭代,或许某个接口在当前版本满足“有且只有一个抽象方法”的特征,但是后续版本也许会加入别的抽象方法,从而破坏“有且只有一个抽象方法”的特征。如果发生这种变动,对已有项目的冲击一定时巨大的。

但是有了@FunctionInterface注解就不一样了。一旦一个接口加了该注解,说明这个接口从设计之初就是用来作为函数式接口使用的,而不是因为版本原因让其看起来像个函数式接口。加了注解,就当于做出了一份承诺,无论以后如何变动(可以随便加默认方法和静态方法),都会保证“有且只有一个抽象方法”的特征。

所以函数式接口除了要满足“有且只有一个抽象方法”的特征外,还需要加@FunctionInterface注解来显式指定和承诺。

相关热词搜索:函数 特性 接口 Java8

上一篇:苹果CEO库克在采访中谈到了iPhone以旧换新的增长,以及环保目标
下一篇:最后一页

济宁知名律师   电话:0531-80961678
手机:18053115917   微信:18053115917   QQ:709581498   邮箱:709581498@qq.com
网站地图 (XML地图 / 百度地图