00:00
好,那上午的话呢,我们最后提到呢,叫函数式接口,诶怎么引出这个概念呢?诶我们呢,一直在讲讲这个拉姆达表达式,哎,拉姆达表达式呢,我们也做了一个总结啊,哎,通过这些总结,包括下面写的这个例子,我们发现呢,首先这个拉姆达表达式呢,针对的都是接口,相当于是我们给这个接口提供具体的一个实现类的对象时,咱们用到了拉姆达表达式。那这是第一个问题,第二个问题呢,就是呃这个嗯接口有一定的要求,就是这个接口里边啊,它只能有一个抽象方法,那既然呢,你只能有一个抽象方法,所以我们再去提供这个实例的时候呢,哎,我们说呀,其实你就没有必要告诉我这个方法的这个名字是什么了,因为反正我重写的时候呢,都是你那个名的方法,不会有任何歧义,所以呢,你看我们这个写法里边就要就把这个东西呢,就都给省略掉了,包括呢,你既然是一个接口的实现类,而且还是个匿名的,所以你有的时候呢,也一定是这个接口,像这些东西呢,在我们看来呢,其实都没有必要去写,哎,我们只需要保留你不同的部分就可以了,比如说呢,你这个方法体,哎,作为我们这个拉姆体,拉姆达体出现,比如说你这个方,呃方法的这个形态列表,形态列表的话呢,这个名哎,不知道你叫什么,或者说呢,你在里边也可能会用啊,为了方便去用呢,咱们指明一下你的这个变量名,这个变量的类型的话呢,呃,通常的话。
01:27
看呢也都啊确定下来了,所以也没有必要去写。啊,所以说呢,我们才可以写成哎,这个拉姆达表达式的形式啊,总结一句话就是诶拉姆纳表达式,我们说它的本质呢,是作为接口的实现,准确的说应该作为叫函数式接口的实现,那么什么叫函数式接口,哎,就是咱们刚才提到的说,如果一个接口中。说只声明了。啊,只声明了一个抽象方法,则此接口就称为哎,函数式接口,哎,就称为函数式接口,那么比如说crl shift t,咱们看一下这个叫所谓的reable。
02:14
哎,打开以后这呢,我们说它只有一个除量方法,它就是一个函数式接口,同时我们会看到在这个random的上面会有一个注解,哎,就叫functional interface。对,就叫函数式接口,那这个概念也是在我们1.8的时候呢提出来的,因为在1.8的时候呢,我们才有了拉姆达表达式,哎,所以这个注解呢,就是1.8,哎它呢是我们所说的一个函数式接口,哎,它是一个函数接口啊,然后ctrl shift t再来一个我们写的这个叫aror。哎,它呢,也有这个叫functional interface,因为内部也只有这样的一个抽象方法。OK,这个呢就非常好理解了啊,那我们自己呢,也可以试着来定义一个接口,好,我这是个接口,比如说呢,我就写成叫MY啊interface没有什么具体含义了啊,就是一个普通的接口,这个接口里边,比如我们写一个叫my third1,那这呢就是个抽样方法啊,那这个时候呢,我们就可以把我们这个函数,那如果我加上一个叫functional interface。
03:25
啊,就是显示的指明它这是一个函数接口啊,那你时候我要是不加这个的话呢,这算函数的接口吗?诶对算也是啊对也是只是说呢,我们加上以后呢,是不是可以做一个验证啊,哎检验一下你这个接口是不是一个函数接口,就跟咱们前面说你这是个负类,这个此类,哎这这一个方法这个重写了,哎上面有个overwe,你要没加overwe是不是也是重写。对的啊,就是你加上呢,它可以校验一下你这个是不是一个重写,比如说呢,我们这当你试图再去定义一个方法的时候,我这写一个MASTER2。
04:00
哎,他这块呢,就哎报错了,报错了就说哎,你这个。抽样方法,哎,Multi multi不是多个吗?哎,多个就是说你这里边呢多了啊,那你这块注释一下它就好了。啊,就是非常简单啊,就是只有一个除法方法,这个接口呢,就是一个,哎,函数是接口。你看自定义这个函数式接口成这个概念呢,非常好理解啊,哎,那我们来看一下这个我们关于函数式接口的一些描述,哎,这块呢,提到这个事了,说只有一个充分方法的接口就称为函数式接口,那我们可以呢,通过拉姆达表达式来创建该接口的对象。咱们的拉姆达表达式要想用它就一定依赖于函数式接口,对吗?对吧?哎,对的啊,所以说呢,我们要想用拉姆表示就一定需要啊,使用这个函数式接口,相当于这个函数式接口它的实例就是我们的拉曼达表达式啊,这个我们在这儿,嗯,啊在这儿,这不是这个,呃,在这写这个事情啊,说拉曼的表达式的本质就是作为函数式接口的一个实例啊,这个大家要记住啊,下边呢,关于这个拉姆的表式呢,这块也有一些这个介绍啊,稍等一下我们再看,诶那么我们接着还看这个概念,这里边说我们可以在一个接口上呢,使用啊,Char functional interface这个注解,检验一下这个接口是否是一个函数接口,诶没问题,同时呢,说我们这个Java dock呢,也会包含一条声明,这个声明呢,诶,声明这个接口是一个函数接口,哎,这什么意思呢,就是我们在这个API里边啊,这呢,就是咱们用Java dock呢,生成的这样的一个API文档啊,比如说我们在这去搜一下叫raable。
05:52
哎,这个rebow啊,进来以后你会看到呢,我们这个rainbow上面呢,就会有这样的一个注解,哎,就相当于我们这个注解呢,就保留在了我们这个Java do生成的这个文档当中,诶相当于用Java do解析的时候呢,它会被保留,哎就是刚才说的这个事情啊,然后呢,就是说我们在呃,java.u to.function这样一个包下呢,定义了JAVA8里边丰富的函数式接口。
06:17
啊,这样一个概念,行,这个我们先不去看啊,然后接着关于函数接口,我们呢,再做一个了解。说Java呢,从诞生之日起,就一直倡导一切皆对象,也就我们所谓的万事万物皆对象,嗯,说在Java里边呢,面向对象编成就是一切,但是随着Python啊,Skyla这样的语言的崛起,说Java呢,不得不做出调整啊,以便呢支持更加广泛的技术需求啊,以及Java不但支持呢op op啊面向对象的编程,还支持呢面向函数的编程,哎,面向函数的编程呢,其实非常的灵活啊,非常的灵活,哎,这呢我们Java呢,其实一开始到现在呢,都已经有20多年了啊,你要说这个最初的时候出现啊,他呢,这个这个非常的这个火爆是吧,大家都爱去学Java,然后随着这个时间的这个往后推移,其实又出来了一些新的一些语言啊,当然这个Python语言的话呢,其实比Java还要早啊,你要看Python Python其实出的还要早,只是说呢,这个这哥们儿呢,这个大器晚成是吧,火的比较晚啊,啊这几年才火起来了,主要是借助于这个人工智能这个崛起啊。
07:25
他才出来了,善意呢,是做这个数据分析啊,那当然了,他其实也能写后台,也能做数据分析,还能做爬虫啊,还能做这个自动化运维,Python能做的事儿还挺多的啊啊就是像这种哎,带有函数式这样特点的语言呢,其实是比较灵活的,那Java的话呢,一开始就把自己限定到面向对象里边了啊,一切呢都是对象。啊,就会显得比较重啊,在函数式编程里边呢,函数是作为一等公民对待的啊,但是在我们这个,诶Java里边呢,那对象呢,一定是一等公民啊,那么把函数作为一等公民呢,变成语言当中这个拉姆达表达式,它的类型其实是一个函数啊,像拉姆表示呢,在这个Python当中呢,这个一直也都有啊,它呢,其实这个拉姆达表达表示的叫匿名函数了,它是一个函数,但是在我们Java里边呢,我们也想把这个东西引进来,那咱们引进来以后呢,你一开始不是要面向对象吗?那你这时候你的拉姆那呢,其实就不是函数了啊,你呢就得是对象。
08:26
哎,咱们看到了也确实是对象啊,咱们呢,就是作为这个函数式接口的一个对象,所以呢,哎,这个函数这个拉玛表示啊,函数对象大,这要注意啊,这呢就我们说的这个事儿,拉曼达表达式就是一个函数式接口的一个实例啊,说以前呢,大家用匿名实现类表示的方式,现在的话呢,我们都可以使用拉曼达表达式来写。哎,所以说呢,我们讲完这个拉姆达表达式以后啊,什么时候用啊,首先是一个函数式接口,当你需要创建一个函数式接口,它的匿名实现类的对象时。
09:04
那你可以就用拉姆的表达式来做。就可以了啊。行,那这个呢,我们把这个事呢,往下这个写一写啊,诶CTRLV,哎这是一句话,还有刚才呢,我们提到的,哎这个事,哎,CTRLC一下。哎,称为函数接口,然后这样。诶,检验一下哎,它是否是一个函数接口,哎,这个呢,我们来个六哎CTRLS好,那关于我们说这个拉姆达这个函数接口的概念呢,我们就清楚了啊。
我来说两句