当前位置:   article > 正文

JDK8中的新特性——函数式接口_jdk8 为什么引入函数式编程

jdk8 为什么引入函数式编程

JDK8 简介

概述

 Java 8由Oracle从2014年3月18日发布,此版本是自Java 5(发布于2004年)之后的一个重量级版本,也是java发展史上的一个里程碑式的版本。这个版本在JVM、编译器、库、Java语法特性等方面都做了很大改进,同时在语言的表达力、简洁性等个方面也有了很大的提高。目前几乎所有的JAVA框架也都已升级到支持JDK8,打开框架源码想了解其设计,假如不理解JDK8的这些特性看起来就会非常吃力。希望这些小总结对你有所帮助.

新特性介绍

Java 8这个版本提供了很多实用的新特性,针对接口推出了接口默认方法,接口静态方法以及函数式接口,同时为了简化代码编写,推出了lambda表达式,为了增强对数据的操作,还定义了Stream操作等。这个版本目前是市场上一个应用最广泛,也是最重要的一个版本。

JDK8 接口新特性

概述

JDK8中对接口规范进行了新的定义,允许在接口中定义默认方法(使用default关键字修饰),静态方法,同时还推出了函数式接口(使用@FunctionInterface注解描述)设计。

应用场景

基于JDK8中接口新规范的定义,不仅可以扩展接口新功能(新的标准),还能保持接口向前兼容的特性。例如Java API中的集合操作规范。

快速入门分析

default方法设计及实现

JDK8中为了对接口业务进行扩展,但又不影响实现类,提供了默认方法。此类型的方法使用default关键字修饰,可以有方法体的实现。例如:

interface IA{  default void doMethod01() {    System.out.println("doMethod01");  }  default void doMethod02() {    System.out.println("doMethod02");  }}

接口默认方法提高了编程的灵活度,一个类在实现接口时,接口中假如有默认方法,

默认方法可以有选择性的对其进行重写,但不是必须要重写,例如:

class ClassA implements IA{}

接口默认方法,解决了java8和以前接口版本特性的兼容性问题,对于我们以后的程序开发,可以在接口子类中直接使用接口默认方法,而并不再需要在各个子类中都去实现这些方法了。

接口中的static方法设计及实现

Java8中的接口规范,不仅允许定义多个默认方法,也允许在接口中定义多个静态方法,这些静态方法类似于 class 中的静态方法,可以通过接口名进行直接调用。

interface IB{    static void doMethod() {       System.out.println("doMethod()");   } }

接口中静态方法并不能在实现类中被重写,实现类中可以声明相同的方法,但这两个方法之间除了名字相同,并没有 override 关系。

函数式接口设计及实现

Java8引入了一种是函数式接口(Functional Interfaces),此类接口使用

@FunctionalInterface注解修饰,并且此接口内部只能包含一个抽象方法。

@FunctionalInterfaceinterface IC void doMethod();}

说明:函数式接口推出的目的主要是为了配合后续Lambda表达式的应用。

JDK中的一些默认函数式接口

在JDK中的java.util.function包中定义了大量函数式接口。这些接口可以更好配合一些业务及JDK8中的lambda表达式进行应用,常用的有如下几类:

消费型接口(特点:方法有入参,没有返回值):

@FunctionalInterface public interface Consumer<T> {    void accept(T t);}

函数式接口(特点:方法有入参,有返回值):

@FunctionalInterfacepublic interface Function<T, R> {     R apply(T t);}

判定式接口(特点:方法有入参,返回值为boolean):

@FunctionalInterface public interface Predicate<T> {      boolean test(T t);}

供给式接口(特点:方法没有入参,但有返回值):

@FunctionalInterface public interface Supplier<T> {      T get();}

总之,所有规范都不是一成不变的,随着JDK版本的升级一些规则和规范都在发生变化。JDK8自带的这些接口可以配合Lambda使用以减少我们自己接口的定义。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53189
推荐阅读
  

闽ICP备14008679号