ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通俗易懂,jdk8-@FunctionalInterface:函数式接口

2022-02-06 20:06:13  阅读:202  来源: 互联网

标签:Function 承载 函数 FunctionalInterface 接口 jdk8 抽象 通俗易懂 方法


通俗易懂,jdk8-@FunctionalInterface:函数式接口

定义

接口中只有 “一个” 抽象方法,该接口就可以被定义为函数式接口

自定义函数式接口:Function

public class FunctionalInterfaceTest {

    interface Function {
        void method1();
    }

    public static void main(String[] args) {
        test(() -> System.out.println("方法一"));
    }

    public static void test(Function fuc) {
        fuc.method1();
    }
}

输出

方法一

添加一个默认方法和静态方法(只有一个抽象方法),可以正常编译

在这里插入图片描述
输出

方法一
方法二
方法三

添加第二个抽象方法method4(两个抽象方法),无法编译

在这里插入图片描述

@FunctionalInterface

使用该注解的接口,说明该接口是个函数式接口

注解源码,里面没有任何方法

在这里插入图片描述

但是可以校验接口是否函数式接口,类似@Override校验是否重写方法(此处有两个抽象方法,被检测出不是函数式接口)

在这里插入图片描述

深入理解

函数式接口,函数也就是方法,顾名思义就是承载方法的接口

通过一个简单的例子来理解这句话(此处用List来管理了函数式接口,当需要的使用的时候再执行)

在这里插入图片描述
输出,没有任何内容,说明上面打印 “方法一” 和 “方法二” 的方法没有执行。因为Function接口只是承载了这两个方法,但是没有执行方法
在这里插入图片描述

如果需要执行承载的方法,只需要调用接口中唯一的抽象方法就可以了

在这里插入图片描述
输出,可以看到承载的方法被执行了
在这里插入图片描述

jdk最常见的5个函数式接口(Function,Consumer,Supplier,Predicate,Runnable),5个接口最主要的区别就是入参和出参的不同

Function,通过抽象方法apply发现,接口承载的方法,需要一个入参t,承载的方法会返回一个类型为R的结果
在这里插入图片描述
例子
在这里插入图片描述
结果,param * 10 -> 10*10 = 100
在这里插入图片描述

Consumer,通过抽象方法accept发现,接口承载的方法,需要一个入参t,承载的方法的返回值为空
在这里插入图片描述
例子
在这里插入图片描述
结果
在这里插入图片描述

Supplier,通过抽象方法get发现,接口承载的方法,不需要入参,承载的方法会返回一个类型为T的结果
在这里插入图片描述
例子
在这里插入图片描述
结果
在这里插入图片描述

Predicate,通过抽象方法test发现,接口承载的方法,需要一个入参t,承载的方法会返回一个boolean类型的结果
在这里插入图片描述
例子
在这里插入图片描述
结果,param > 10 -> 11 >10 = true
在这里插入图片描述

Runnable,通过抽象方法test发现,接口承载的方法,不需要入参,承载的方法的返回值为空
在这里插入图片描述
例子
在这里插入图片描述
结果
在这里插入图片描述

其他常见的一些函数式接口,主要区别也是入参和出参

BiFunction
在这里插入图片描述
BiConsumer
在这里插入图片描述
BiPredicate
在这里插入图片描述

总结

函数式接口的核心为抽象方法,根据抽象方法可以确定承载方法的入参和出参,通过调用其抽象方法来执行承载的方法

标签:Function,承载,函数,FunctionalInterface,接口,jdk8,抽象,通俗易懂,方法
来源: https://blog.csdn.net/weixin_43938143/article/details/122798553

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有