00:00
嗯,那么拉姆达表达式呢,暂时先告一段落,基于拉姆达表达式,在下边提一个新的结构,叫做方法引用,诶首先呢,方法引用跟拉姆达表达式呢,它不是一个东西啊,嗯,不是说它们不是个东西,是不是同一个东西是吧?啊这个方法引用,嗯,它这个格式呢,跟我们拉曼达表达是完全不一样,它是一个新的结构啊。这个我们写到下边了。嗯,它是一个新的结构,它的这个使用的格式呢,是长这个样子的。哎,这是它的一个使用的一个格式是长这样子的,那么关于它的一个理解呢,我们在这呢,写了这样的一句话。嗯,它的一个理解,嗯,说呢,当我们要传递给拉姆达体的这个时候,说白了就是它是基于这个拉姆达表达式的啊,当你要传递给,当要传递拉姆达,就是你写这个拉姆达体的时候啊,发现呢,在拉姆当中你调用的这个方法一,呃,调用这个方法正好跟我们这个接口中的创造方法,它这个结构呢,是基本一致的匹配的,那这个时候呢,我们就可以用这个方法引用呢,做一个替换。
01:09
C。哎,就是说的这样的一个情况啊。好,那具体的这个使用情境啊,使用情啊,这个使用情景是我刚才说的这个问题啊,这样,那关于他这个理解,那我们看一下这里边这个描述哈,说这个诶方法引用呢,它可以看作是拉姆达表达式的深层次的表达,换句话说呢,方法引用就是拉姆达表达式。其实叫就式的话呢,也不是说特别合适了,因为它俩毕竟是两个东西了,你可以看成是用方法引用来替换拉曼达表达式啊,而这个拉曼达表达式呢,又来替换你原来的函数式接口那种匿名实现类的方式,所以就是一个一个的替换方法也用呢去替换拉曼的表达式,拉表达式呢,又替换原来匿名实现类的那种用的方式,那进而的话呢,方法引用相当于就是函数式接口的这个实例了。
02:02
那就是这样的一个情况啊。嗯,CTRLC把这个话呢,我们过来这啊。诶,CTRLS一下,那下边的话呢,我们说分三种情况来提,这呢,因为提到了这个类和对象了,方法这块呢,又分为静态方法和非静态方法,所以具体呢,我们展开这呢,就列举出来这样的三种情况,哎,CTRL搜一下。那具体这样三种情况,那通过对象调非静态的方法啊,通过对象呢来通过类呢调静态方法,通过类来调非静态方法,就没有说通过对象再去调静态了,左边这两个,右边两个这个两两搭配,安卓有四种情况,那对象调静态,那么其实你用类不就能调吗?所以用不着说用对象去体现调静态了啊,那这里边比较特别的就是我们这种情况。这种情况呢,也相对来讲是比较难一些的,那我们这块呢,这个要求,其实这个要求呢,先是针对这个情况一和情况二来说的,这里边我们提到这样的啊,CTRLC一下。
03:12
哎,提到这样点说呢,呃,要求这个就是接口当中的抽象方法啊,因为呢,我们现在要给函数接口呢,做一个实例化了,你这个抽象方法的行参列表和返回值类型,和我们另外的你想用的这个方法的形态列表返回类型是正好对应,哎这个呢正好,哎我们就可以用方法引用了,这主要是针对于我们这两种情况啊,那针对第三种情况,它就稍微难一些,哎,咱们这个上课也举这个例子了,在这里边呢,我写了一下这个。诶,针对这个三的这种情况啊,在这写的来CTRLC一下。这个整个我们把它这个字体变成一致的啊。
04:02
嗯,这是一个。这是一个啊。好,你看这里边说呢,当函数式接口的方法的第一个参数是需要引用方法的调用者,并且第二个参数呢,是需要引用方法的参数,或者没有参数了,这个我们就直接用类来去调这个非静态的方法,它呢是针对于咱们这个情况三来说的。那这个应该讲这个方法引用呢,相较于我们拉达拉姆达表达式呢,就更难一些了,呃,这个就更难一些了啊嗯,下面呢,关于这个使用的一个建议,就是我们这个用的话呢,关于拉这关于这个方法引用,大家怎么去选择呢?呃,应该这样说哈,说如果嗯给这个函数是接口。啊,这个提供实例啊,这个恰好。
05:04
哎,恰好呢,我们这个抽象方法啊,或者叫恰好满足吧,呃,满足我们这个方法引用的要求啊,或者叫方法引用到我们这个使用情境啊。嗯,然后大家呢,就可以考虑。嗯,使用这叫方法引用啊,然后给咱们的函数式接口呢,提供实例。啊,这是这样的情况,那如果大家呢,不熟悉这个方法引用啊,那么你还可以使用拉姆达表达式。哎,就是这样,哎,那如果拉曼表达式还不熟悉怎么办啊对,那你就老老实实的写匿名实现类是吧,那样的方式就可以了啊行这呢我就不写那句话了,因为这是关于方法引用的我们的一个建议的啊,下边呢,关于这个使用的举例啊,因为这针对有三种情况来讲,我们下边呢,就列很多这个例子啊,针对情况一的,情况二的,情况三的,哎这个列的这个例子啊,大家下来呢,你把这个例子呢,哎都可以看一看。
06:19
嗯,其实这几个例子的话呢,也比较有代表性啊,这个我调的呢,相对比较有代表性的一些,哎,你看通过这呢,你能看到左边呢,都是一个函数是接口,呃对应的这个抽象方法,哎跟另外的某一个类中的这个,呃方法这块呢,有相应的这个匹配关系了,我们就用方法这个引用去替换了,当然前提是呢,你这个这个这个什么函数接口,你实例化的时候呢,本身就想体现这个事儿啊,你本身就想用这个事儿,你就这样写,不想用string,那你你肯定也不可能用方法引用了啊好,这呢是我们提的这个方法引用这个结构。啊,这个相对来讲比拉曼表式要更难一些,然后在下边呢,提到叫构造器引用和数组引用,哎,首先呢是构造器引用的这个格式,哎这个格式的话呢,还是看一下我们这块啊。
07:10
那这个格式我们没有在这写了,其实呢,就是我们这个在这写一下啊,构造西营的这个格式类名,哎这个然后呢,冒号冒号new吧。哎,这样的方式,呃,数组引用呢,这个就是数组类型,哎,然后呢,一个中括号,哎,然后冒号冒号,然后还是一个new。啊,应该说它俩呢,是这种对应的啊,或叫类似一样的啊,这个我们在这个应用类型变量这块呢,这个类啊,还有这个数组都是啊,那数组的话呢,你得加上一个中号啊,我们数组也是有一个数组也有中号对象呢,就是你有一个啊这个类名或者叫构造器名,哎,都是这样的格式啊,说白了就是这个里边你也不用去提提供任何的构造器,或者说这个数组的这个长度啊,这个这个包括你这里边这个呃行参列表啊都不用了,因为跟你这个呃抽象方法的这个行参结构就一样了。
08:10
嗯,然后具体关于构造器引用的一个使用要求,这人就提到,其实说白了也是一个使用场景了。嗯,这个跟方法也用类似函数式接口的抽样方法的形态列表和构造器的型态列表一样,那这时候呢,我们抽样方法的反应类型跟这个构造器的来说说这个类型还一样,我们就可以做一个构造器用的替换,那这样的情况啊,那具体的举例这块我们就写了几个,像这个supplier呢,这个是这个,这个叫什么供给型接口里边什么也不放,然后还出一个东西,那就好比是呢,我们去调一个构造器,这个构造器呢是没有参数的,正好跟你这个是对应,然后呢,我们调完构造器呢,还返回这个对象,恰好呢,也是你这个get想返回这个类型的,哎,这呢就是它的一个例子啊,下边也有这个对应一个参数的两个参数的啊,就相当于你调用相应的带参数的构造器一样。
09:06
行这呢,就是我们这里边的这几个例子。行,这是构造器引用,嗯,在下边呢,关于这个数组引用,那其实也是跟我们刚才这个描述数组,呃,描述这个构造器这块呢,其实也是类似的啊,呃,恰好呢,你要创建的这个有相应的这个数组去提供了,比我们这里边这个方式。那这个function我现在呢,嗯,调一个function有一个参数返回来呢,我就想是一个数组,那这时候的话呢,就我们就用这个数组引用,那这样的方式去提供就OK了啊,那具体的这个引用的这个格式啊,这个格式呢讲到这儿了啊,那下边呢,是它的一个引用举例,这咱们又写了一个这样的例子。CTRLC。哎,这样插过来,那在这个位置呢,这不就体体现了这个叫构造器的一个,哎,数组的一个引用啊,行,那如果说你要想不起来这样去用,包括扩道器这个还是那个意思,你要能用这个拉姆达表达式也可以啊,也行啊,拉姆表式还不会,你再用匿名的那个实现类的方式啊,那应该呢,可以说JAVA8里边这个拉姆达表达式,哎,包括方法引用和构造器引用,这个在后边来看呢,还是会应用起来的。
10:22
啊,不会说呢,在某一天的时候,拉曼表达式被deprecated了。这个不会,所以大家呢,慢慢这个也得需要去熟悉这样的这个语法结构啊,下来的话呢,相应的你可以再去练一练啊,另外一方面呢,就是比较着急的,我能看到这个点,就是到后边大家看一些框架,尤其是一些比较新的一些框架的时候,它在底层呢,会出现咱们见到的这些函数型接口了,那以及呢,它既然出现函数型接口了,它呢就开始用拉姆的表达式了,这个时候呢,你要基本能看得懂人家到底要干什么。啊,跟原来的匿名的什么样的格式是一样的,诶你能能够翻译过来啊,这是最基本的一个需求啊,一个要求行,这是关于我们说的这个拉姆表达式这样的一个结构来说明啊。
我来说两句