00:00
成,哎,那这个呢,我们就先告一段落了,然后再往后讲呢,叫方法引用和构造器引用啊,如果刚才呢,大家关于拉曼的表达式呢,听着有点晕,那么方法语用呢,估计你就更晕了啊,因为方法语用呢,构造器引用还是基于拉姆达表达式的啊呃,怎么讲,你看我一开始在讲这个例子的时候呢,其实就放了一个伏笔啊,咱们一开始讲这个给大家举例子的时候啊,一开始的时候呢,我们是这样写的,这还是比较传统的写法,后来呢,我这个位置改成了一个拉姆达表达式。再后来呢,出现了一个这个东西,它就是方法引用啊,这个呢已经有点懵了,那这个的话呢,会感觉更爽是吧?哎,那就得更难了,就哎就是这个意思啊,那当然咱们也得接触接触啊,这个任何东西都是从不熟到熟来的是吧?哎,先看一下这个方法引用啊。
01:00
说呀,当要传递给拉姆达体的这个操作呀,已经有实现的方法了,我们呢就可以使用叫方法引用。啊,说了跟没说一样是吧,还是不太懂哈,嗯,我们先描述一下这个事儿看看啊说方案引用呢,可以看作是拉姆的表达式的一个深层次的表达,哎,换句话说,方法引用呢,就是拉姆达表达式啊,既然你是拉姆达表达式,那你就是一个函数接口的实例,哎,通过方法的名字来指向一个方法,可以认为是拉姆表的是一个语法糖,好,这再往下看就更不懂了啊,这个呢,及时的终止回来,咱们举例子啊。嗯,回来举例子,那举例子的话呢,嗯,这个咱们就这样来做了,哎,我这块呢,放了几个。原文件啊,咱们就基于这样的几个原文件呢,咱们来看就行。啊,CTRLC一下新建一个包。哎,拍位置啊,JAVA2诶CTRLV把我们这几个类呢都粘过来,来,我们在这里边呢,去说这些问题啊,先都关掉。
02:08
嗯,这里边首先呢看一下这是一个普通的类叫employee,这employee的话呢,声明了四个属性啊,盖塞的方法啊,构造器啊,这个这个ES哈西code twoth string,这个我们都已经写过了。都比较简单啊,然后呢,有一个employee data,这employee data的话呢,我们提供了一个静态方法。第二列方法返回一个很多employee构成那个list,造了好多这个list,呃,造了好多的employee加到list里啊,这个比较简单啊,好,然后呢,下边这不我们提到叫方法引用。哎,方法引用的一个使用,咱们呢,就在这里边呢,哎看着这些情况,咱就往下填一填,写一写,哎就可以,哎大家呢,要想熟悉方法引用啊,你也这样做就行啊,首先呢,我们提到一个点就是呃,什么时候要使用方法引用呢?哎,它的一个使用的一个情境。
03:05
这个是咱们一定要关注的哈,就什么时候我们要用。就像我们前面讲这个拉姆达表达式一样。哎,确实挺好,但是呢,你得知道什么时候用。哎,就是你给一个函数式接口附一个对象的时候,哎,我们才会去用啊,那现在呢,我们提到方法引用什么时候用呢?其实刚才呢,这句话就说明了这个事儿。说当要传递给这个拉曼体的这个操作呀,已经有方法实现了,我们就可以用方法引用,比较抽象,咱们看这个例子啊。看这个例子。嗯,这个呢,咱们一会说这个事啊,哎,我现在呢,呃是想做个什么测试呢,我这有consumer consumer的话呢,它有一个这个access方法,哎它呢传一个值,然后呢是一个VO的一个返回,哎这种情况,哎咱们呢,先来写一个拉曼达表达式的一个情况。那那咱们写这个方法已用默认,大家答的表达式都已经OK了啊,这默认都已经OK了啊,哎,我再往右写怎么写。
04:09
哎,这,这是不是得有饭啊。String的啊,哎,等于在右边的话呢,自然而然,你这写个string,这是不是就string这呢,你就写个str吧,比如说是吧,哎,然后在这里边呢,它不有没有返回值,那咱们就简单的做一个CT得了。那我就输出一下这片,这不就比较简单的一个拉漫表示吗?那这个呢,写完以后我们坑一点,咱们accept调用一下,我这写一个北京。北京哎,掉的时候呢,这不就输出这个北京吗。OK啊,这呢是我们的拉曼达表达式的这种写法,然后呢,我们现在来看一下方法引用。方用那怎么看呢?大家看啊,我们这个consumer它的这个方法呢,是这种特点的,放一个变量不返回。
05:07
你会发现呢,我们有一个叫print stream打印。那其实呢,就是我们C c.out这个返回的不就是个打印流的对象吗?哎,说这个打印流里边有个方法叫做print line,这个print line啊,你发现诶,它也是放一个参数的类型,它也不返回。这不就相当于是,诶我跟你这个好像正好匹配上,那如果呢,出现这种情况了,我们说呀,哎这个位置呢,我们可以把拉姆达表达式呢再升下级,说呢,你还可以用方法引用,就是这句话说呢,当要你呃当传递给拉姆达体的这个操作,这不是拉姆达体吗?说已经有实现的方法了,这就我们的print烂方法,那这个时候啊,哎,你可以把这个结构呢改造一下,改成是一个方法引用。啊,那方法引用可以做个改造,说白了就是它呢,是替换我们原来的呃,这个其实相当于是拉姆达体的这个位置了啊,所以我们才有刚才PPT里边说的这句话,什么话呢,说这个呃方法引用,哎它呢本质上哎本质上呢,呃就是咱们的哎拉姆达表达式。
06:16
哎,只是说我们换了一种格式哈,哎本质上呢,它就是拉姆达表达式,而我们的哎,拉姆达表达式。嗯,它呢,是作为咱们函数式接口的这个实例出现的啊,所以所以什么呀,方法引用是不是也是咱们函数式接口的一个实例啊。你看方案引用是拉法表达式,而拉法表达式呢,又是函数接口的实例,那你这个方案引用不就是函数接口的实例吗?哎,就这个意思啊,那是这个实例,然后下边呢,我们这个具体来说啊,应该怎么去使用啊,使用的这个格式啊,格式的话呢,我们会看到它有两个这个冒号啊,这个冒号前面的话呢,呃是我们的这个类或者呢是对象相当于呢,就是这个调用者啊,比如说在我们这个问题当中,我们的这个accept方法就用这个printline方法呢去做替换,那printline的话呢,你不得有调用者吗?
07:23
对调呢,就我们这里边就是system.out返回的一个打印流的对象。所以要想调print烂,诶,我们得有一个调用者啊,这是必须的,然后右边这块呢,就是你调用的这个方法,方法注意是名。方法名,参数列表都不用写了,为啥不用写呢?因为你跟这个不都一样吗?这样哈,这是使用的格式,然后下边呢,具体来说,呃,具体分为啊如下的三种情况,哪三种情况呢?哎,这里边我们关于这个类跟对象呢区分一下啊,一种呢是通过对象来调的,那对象来调右边呢涉及到这个方法名,方法的话呢,又分为静态非静态,首先比较简单的一种就是对象呢调这个叫诶非静态的方法。
08:13
啊,非静态方法,我们也称作叫实例方法。哎,就是跟实例变量一样啊,哎这个呢好理解,然后呢,还可以通过这个类呢,哎,我们去叫什么呀。哎,静态方法。哎,还可以呢,通过类来调用啊,非静态方法。注意我没写错啊。我没写错,有同学说类A类调非静态方法。咱们在这个面向对象里边,类是不是点不了这个飞行态的呀,对,但是在这儿呢,是可以用类去调的,这个也是比较难的一个啊,不能够用对象去调静态方法啊,这个没有,因为用不着嘛,直接通过类就掉了啊成哎,所以下边呢,你看我这分成这个叫情况一,情况二和情况三啊。
09:03
好来了啊,我们开始写了,那开始写,首先左边这块呢,是不是不变啊,这都不变。嗯,还是它右边这块。右边这块呢,我们刚才说到了,说我们现在呢,需要主要是重启这个S方法,这个方法呢,已经有另外一个方法实现了,那么就用这个方法来替换,那这个方法呢,你看诶非静态的,非静态的那个对象呗,对象谁呢?对象是不是就是他这个对象提现呢,你可以造出来呗,哎,我们呢,付给一个叫诶print stream叫吧。哎,这就拿到这个对象了,这个方法呢,是我们这个对象的,所以呢,我们使用咱们这个对象,哎冒号冒号哎方法名叫print,哎这就有希望了。这个都不用传了。啊,因为呢,这个参数呢,跟你这个,哎,这个这个参数,你这是什么参数,我这块不也是什么参数吗?诶参数呢也都上了,那你这个参数类型是什么呢?这个参数类型你不在这都已经写上了吗。
10:11
非常的简洁啊。啊,然后呢,二点咱们去做一个调用啊,这个写一个比如说拼音的背景。写完了啊。有点难度是吧,都不知道该说难还是不难了啊啊,那咱们还是接着来讲啊,这个大家呢,下来慢慢理解,哎,它不像我们说的知识点啊,这个说完以后呢,哎,你这块你想通了他就过了啊,这个呢,你就是不熟,就像大家一开始写这个hello word一样啊,这个不是代代码上头说多少啊,是你根本这不是逻辑问题哈,这就是这个这个语法的问题啊,就没见过。成,接着再看下边这个例子,这个呢叫supplier啊,Supplier呢是一个攻击者,他呢什么也不放,但是它返回东西。
11:04
哎,这个跟谁有点像呢,我们这个employee里边有一个叫get name这个方法呢,就像是一个供给的这个里边的抽样方法的一个形式,什么也不放,但是它返回东西,哎,你看我们这时候呢,先写一个啊,Supplier。这个位置呢,我就写个string啊,我写sub等于哎先咱们用一个拉姆达表达式来写,哎拉姆达表达式的话呢,你注意这个方法是不是没有参数。是不是这样写?这样哎,然后呢,再返回一个T,呃,返回一个T呢,我们就让它返回是一个呃,String。哎,什么也不,嗯,返回的是一个T是吧,什么也不写这呢,我们就return一个谁呀。嗯,我们要返回,嗯,Get返回的是一个。那这块我们得这样做了啊,这样吧,在这个位置我们先造一个employee啊。哎,你一个。
12:02
Employee这里边我们写他这几个属性,第一个呢是ID啊1001,然后呢name叫Tom,诶然后年龄23,然后来一个工资5600,比如说啊成,那我们现在呢,要写这个方法体,方法体写谁呢?我就写这ERP点盖了写内马。是这样写的。哎,写完以后,我们从这个SQ一点,咱们去调一下它的get的方法。哎,这个该方法,这不就掉的是这个方法体吗。哎,返回的就是我们这个员工的这个Tom,这个Tom啊,把这个CTRLX一下。这不就搞定了?哎,这汤姆也出来了。行,这呢是使用的叫拉姆达表达式,然后接着呢,我们看改成这个方法引用。诶方法引用啊,方法引用来吧,这个呢还借用一下。我就不再造了,把这个CTRLCCTRLV放在这儿,这个叫二啊,再往右往右的话呢,对这个方法呢,已经有我们这个里边的这个方法跟你一样,我们用它来替换了,哎,这是一个非静态的。
13:15
飞行态有个对象对象对象是不是就MP啊,冒号冒号该内就完事。哎,就这样来做啊,哎,然后呢,再一下。改的方法。这样子,哎,就是体会一下这个事儿,呃,本身的这个抽象方法已经有另外一个方法呢,这个实现了,呃,跟你这个参数列表和反应值类型是完全一致的。啊,通过刚才这两个例子,其实我们也想写一个什么呀,一个要求啊。哎,说这个,呃,什么时候啊可以使用啊,这叫方法引,或者这样说吧,应该说方法引用使用的一个要求啊。
14:06
哎,使用个要求,哎上面呢提到了说使用情境,就说你应用方法实现了,哎我们就可以用方法引用了,那具体来讲有什么要求呢?哎,我们要求这个接口中的抽象方法。它的行参列表。哎,形态列表和返回值这个类型,哎,它对于我们这个哎方法引用的这个方法得哎行三列表。哎,和返回值类型都得相同。看能不能看得懂。哎,这呢就是说啊,接口当中的抽样方法,这个抽象方法的这个形态列表,哎和这个反应类型,就跟咱们现在这不是一个方法引用想用的这个方法吗?跟这个方法的这个形态列表和返馈类型呢,都必须得一样。
15:06
人家是Y,你也是Y,你这有一个参数,这里是个参数。当然具体类型的时候呢,你也得是一样的类型了啊,哎,下边这个这个呢,没有参数,这也没参数,这个你是string,我这个呢也是。哎,他们呢,这块必须完全一样,这个时候呢,你才可以用这个方法引用。啊是这样子行,这呢是咱们说的这个情况一啊,通过对象呢,直接来调这个实例方法。
我来说两句