00:00
那函数式接口首先呢,你得知道什么叫函数式接口。那这个呢,咱们在这写的。注意啊,如果一个接口当中只声明了一个抽象方法,说这个接口就是函数是接口,这概念的话呢,非常的简单。这个接口当中,我们当然知道呢,你可以声明多个抽象方法,但是那种真要是一个以上的,这就不算了啊,一个接口只有一个抽象方法的,其实这种呢还挺多的啊,那把这样的接口就称作叫函数式接口。你可以呢,在这个接口上呢,加一个注解,这个注解呢,也是随着我们GT8拉姆达表达式的出现呢,而新加的一个注解,加上这个注解呢,你可以显示的去检查一下它是不是一个函数的接口。当然呢,你要不加人家要是那还是。就跟我们写那个对圈是不是,那over read是吧,哎,验证下边这个方法,你是不是一个重写,你不写人家该是重写还是重写,只是说呢,我们加上以后,你可以在编译时候呢,给你检查一下下边一个方法是不是重写的,哎检查一下你这个接口是不是一个函数接口,如果不是它就报错了啊有这个点。
01:10
行,首先呢,先明确什么是函数式接口,那其次的话呢,下一个问题,函数式接口跟拉姆达表达式有什么关系。哎,这呢,我们提到说拉姆达表达式啊,它本质上就是函数式接口的一个实例。这句话呢,清楚吧,这个得清楚,这要不清楚的话呢,相当于这块呢,就就很难,你后边应用起来拉姆达表达式了啊,咱们上面举的这个例子,就以上面这个举例一和举例二来说,我们左边呢,都是一个函数是接口。既然你写成一个函数接口的这样的一个形式了,相当于你现在要提供右边啊,提供一个这个接口的实现类的对象。啊,右边提供它的实现类的对象,那右边这块呢,我们是现给它拗了一个,而不是说呢,就有某一个类实现它了,你去拗那个对象,那就没意义了,右边这个呢,都是提供了接口的匿名实现类的对象的方式做的,那针对于这种情况,哎,我们说呢,哎,就用拉姆达表达式来做的。
02:16
啊,你要说拉姆达表达是好使吧,它确实也挺好使的,这个格式上显现出来呢,就非常的简洁,但是呢,这种呃越用的比较舒服的东西吧,它有的时候呢,它要求挺高的,不是什么时候都适用啊,就会有这样的一种情况啊,那这里就提到了,只有这种函数是接口在实例化的时候。我们才可以用上拉曼达表达式,哎,只有这样一个场景,没有别的了啊。行这块,这不一会也会说这个嘛,说何时呢,会使用拉姆达表达式啊,那咱们把刚才这个话呢,不妨就现在写到这儿啊说呢,当需要对一个函数式接口实例化的时候。
03:01
哎,可以使用哎拉姆达表达式。可以使用拉姆达表达式,当然你也可以不用,不用,那用原来那个匿名实现类的方式去做就完了啊,你要用用,那就用拉姆达表达式,拉姆达表达式也只能是在这用,嗯,那通过这句话呢,你也能看到这个拉姆纳表达式其实就充当了函数式接口的一个实例,那其实就是个对象,嗯,这个咱们讲课的时候也提到了拉姆达表达式啊,在这个Java当中其实还是对象啊,在人家别的语言,像这个Python当中,拉姆达其实是一个匿名函数,是一个函数。啊,就是有这种面向函数式编程这样的语言啊,它就更灵活一些了啊,这个你像Python里边,你可以直接在写个函数啊,不用非得说我去包一个类,类里边再到个对象,通过对象有调方法,感觉还是稍微的有点臃肿啊,但是Java没有办法,自从第一天历程说这叫面向对象的语言,他就是万事万物皆对象了,是吧?哎,这既是它的一个好处,同时就是它的一个桎梏,把它就给禁锢起来了啊,你想把这个拉玛达加进来,没有办法,它就是对象,那就都对象,万事万物替对象啊这样啊。
04:12
哎,拉姆纳表达式的本质,作为函数式接口的一个实例,好,这是我们说的这个点,好接着这个以前呢,咱们用匿名实现类,哎表示的这种方式啊,你去创建对象的,现在都可以用拉姆的表达式来写,哎,其实就是我们说的这个事情啊。OK过了,然后下边呢,呃提到了说在JAVA8当中呢,这个呃,既然提到这个函数式接口了,哎这呢,也相应的给我们提供了一些你可以去应用的函数式接口,那这里边呢,我们就提到了,首先四个基本的函数式接口。这儿呢,有这四个。那么应该可以这么讲啊,未来的话呢,你会看到更多的这个API呢,呃,如果涉及到用接口,如果而且这个接口呢,它确实还是一个函数接口的话,它一般呢,都会从我们这里边去挑着用了。
05:05
诶什么叫挑着用呢,这呢其实也就涉及到我们下边这个问题哈,你像以前咱们要是想用个接口,除非那个接口它就是一个特殊的功能了,比如像reable啊,像siriable啊,它就是想想示个标识,像sirable,它这个标识传方法都没有,那就还保留着,那如果说其他一些情况的话呢,比如说你现在想定一个接口,这个接口的话呢,恰好还只有一个创方法,然后这个方法你写的时候,你发现,诶这个我想保示表示某一种功能,然后这个功能呢,这个对应的方法呢,就通过这个出感方法体现,这个方法的话呢,需要传一个东西,一个参数就够。他需要传一个参数,然后呢,这个方法呢,还没有返回值。那以前的时候你可能自己就定义了,但现在呢,一想这个怎么感觉挺像是一个消费型接口呢。哎,说你现在要定一个接口,这个接口呢,只有一个乘法方法,有一个形参,然后没有返回值,你看是不是跟我们这个consumer里边的access方法这个形式上是完全对应的呀,对,那既然如此说呀,你就不要再去定义了,你直接就用这个consumer就可以了,虽然说呢,跟你想定义的那个名可能会有点出入,是吧,说你想叫一个什么什么什么的一个接口名,通过名呢,好像能够表达出来某种意思了,但是呢,现在呢,说既然你即使你能表达出某种意思,但是你这个接口呢,也属于一个消费型的。
06:30
在这个方法体验上呢,就往里放东西,但是不出东西,这不就相当于吃东西一样消费了嘛,哎,那你就没有必要再去自己定义一个接口了,你就直接用这个消费型的就可以,那其他呢也类似,那除了这四个之外呢,我们看到还提供了其他的这个拓展的一些函数型接口,那营ID呢,后边我们这个这个再去看到一些新的API的时候,包括呢,咱们后边讲的PI。你会发现,凡是你用到这个接口的位置,如果是需要一个函数型接口,它多数呢就不自己去提供了,哎,直接呢就从这里边去用。
07:06
哎,这也就回答了我们下边这个问题,说呢,讲了这个函数接口了,那么我们何时去使用函数接口呢?哎,我们这里边这样说哈,说如果我们这个开发中,这个我们在这写啊,哎,如果我们这个开发中呢,呃,需要定义啊,一个函数式接口。哎,如果咱们需要去定义一个函数接口了,那此时呢,我们先看一看啊,这个需要定义一个函数接口,然后呢,首先哎,看一看在已有的哎,JDK提供的这个函数式接口中。说是否提供了呃,能够满足你这样需求特点的一个函数接口。哎,是否提供了能满足哎这个这个需求的。嗯,函数式接口,那如果有啊,则直接。
08:05
调用就可以了。嗯,则直接调用即可啊,就不用你再去声明了。啊,不需要啊,自己啊再自定义。了啊,这个能明白这意思是吧?啊说的就是这个问题啊,那这里边呢,我们提到这四个基本的,基于这四个基本的话呢,你像这个函数,比如说它呢,我们通常是一个变量,或者一个这个行参出来呢,对应的这个是返回值啊,你可以叫做就像一个高中讲的函数一样啊,放进去一个自变量,然后出来一个这个因变量。啊,或者叫响应变量,那基于它的话呢,你可以放两个自变量进去,那就相当一个二元函数一样啊,这二元的一个自变量,这个是有一些拓展的情况,在下一页当中呢,列举出来了几个比较常用的啊,这个大家关注一下就可以了啊行,这呢我就不把它往这里粘了,这呢放这四个最基本的,好,这就过了啊。
我来说两句