您的位置 首页 java

JDK8新特性之函数式接口,颠覆性变革

什么是函数式接口

先来看看传统的创建 线程 是怎么写的

再来看看使用了函数式接口是怎么写的

Threadt2=newThread(()->System.out.println(“t2”));t2.start();

Runnable接口直接可以使用Lambda表达式来编写,这是因为Runnable接口是一个函数式接口,来看看Runnable的源码。

@FunctionalInterfacepublicinterfaceRunnable{
publicabstractvoidrun();
}

发现该接口加上了函数式接口的定义注解: @FunctionalInterface ,表明该接口是一个函数式接口。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public@interfaceFunctionalInterface{}

在JDK8中,除了Runnbale接口,还有像Comparator、Callable等接口都加上了该注解定义为函数式接口。

内置函数式接口

JDK8提供了几个内置的函数式接口,用在了许多API的地方,都可以拿来用,可以满足大部分应用。

自定义函数式接口

1、自定义一个函数式接口

@FunctionalInterfacepublicinterfaceCalcInterface<N,V>{
Voperation(Nn1,Nn2);
}

这里只有一个抽象方法,@FunctionalInterface注解可以不用写,至于为什么可以往下看。

2、新建一个引用函数式接口的类

3、测试函数式接口

最后输出:

2313023130

函数式接口规范

1、@FunctionalInterface标识为一个函数式接口只能用在只有一个抽象方法的接口上。

2、接口中的静态方法、默认方法、覆盖了Object类的方法都不算抽象方法。

3、@FunctionalInterface注解不是必须的,如果该接口只有一个抽象方法可以不写,它默认就符合函数式接口,但建议都写上该注解,编译器会检查该接口是否符合函数式接口的规范。

举例说明

正确的函数式接口。

@FunctionalInterface
publicinterfaceCalcInterface<N,V>{
Voperation(Nn1,Nn2);
}

加了几个符合函数式的方法也没事,编译器也不会报错。

这个没用@FunctionalInterface函数式接口,有两个抽象方法,不能用于Lambda表达式。

publicinterfaceCalcInterface<N,V>{Voperation(Nn1,Nn2);Voperation2(Nn1,Nn2);}

这个有两个抽象方法的用@FunctionalInterface注解的函数式接口编译会报错。

@FunctionalInterface
publicinterfaceCalcInterface<N,V>{
Voperation(Nn1,Nn2);
Voperation2(Nn1,Nn2);
}

这个没有一个抽象方法,编译报错。

publicinterfaceCalcInterface<N,V>{}

推荐书籍

  • Spring Cloud微服务实战

  • JavaEE 开发的颠覆者 Spring Boot实战

  • SpringBoot揭秘 快速构建微服务体系

  • SpringBoot实战

  • 精通Spring+4.x++企业应用开发实战

获取所有高清电子书下载请到274435854群。

JDK8新特性之函数式接口,颠覆性变革

推荐阅读


<<2017年,Java程序猿10本经典好书推荐>>

<<高级Java必看的10本书>>

<<Java架构师必看的10本书>>

看完有没有收获?分享到朋友圈给更多的人吧。

架构之路,头条精选,每天一篇干货,喜欢就收藏+关注吧!

文章来源:智云一二三科技

文章标题:JDK8新特性之函数式接口,颠覆性变革

文章地址:https://www.zhihuclub.com/176492.shtml

关于作者: 智云科技

热门文章

网站地图