00:00
下面我们来讲解下一个话题是什么,什么东西呢?叫影视类这个东西,那首先我们看一下影视类是什么哈,啊在SC2.1过后呢,它提供了隐私类,它可以用implicit去声明一个类,那么隐私类的功能非常强大,同样它可以扩展这个类的功能。比前面影视转换丰富内库的功能更加方便啊,尤其是在集合中,这个影视类就会发挥重要作用,那么集合呢,我们下一次课就要开始学习。那饮食类有什么特点呢?我们来看一下,首先第一个它所带的构造参数只只能有一个,有且只能有一个,就是说它有一个参数,但是只能有一个对。那么隐私类必须定义在类或者半生对象或者包对象中,即它不能是顶级类,就不能写在,呃,写在这个top level就是不是顶级的,待会我举例说明,隐食类呢,还不能是样例类,样例类我们现在没有讲哈,样例类很快就要讲了,这个呢,也是特别重要的东西,样例类还有作用域类,不能与有与之相同名称的标识符。那讲完这个呢,我们来一个快速入门吧,来看一个一次类,比如说同学们看到这有一个my class。
01:22
一对吧,里面有个方法,有个方法,呃,那么我在这呢,写了一段代码,大家看到这个地方就是我写的一个隐食类叫implicit class DB,然后这个DB呢,它它有一个行参。啊,这个实际上就是我们以前讲的主构造器,它可以传入一个形参。那穿一个隐身过呢,我在这边有个方法叫爱的啊S。那这个时候这个隐私类只要写好了,过后他会做什么事情呢?他会这样做啊,比如说我们六了一个MYSQL1,这个MYSQL1呢,在六的时候,它就会DB1,就会自动的生成一个隐类,那它会干什么?当你这样做够MYSQ1.i的S就可以用了。
02:14
它底层是怎么实现的呢?我把这个放大一点。A。就说你只要写了这么一个东西。就是这个就是饮食类。你只要写了这么一个东西,他会干什么呢?就会他会在你创建一个这个实例的时候。就是MYSQ1这个实例的时候,自动就发生隐私转换。啊,发生隐私转换就意味着我们可以去使用这个影视类里面的使用方法,那底层它是什么时间呢?还是原先的个思路,DD1DOLLAR1,这个DB Dollar一传进去这个这个就是其实说白了这个就是它里面的一个构造构造器,然后再调用S。啊啊,那么这第一个这个参数就是返回了一个什么呢?它返回了就是这样一个类型。
03:04
就是这个影视类,这个类型,就是说这个家伙在底层会形成一个类,这个类的类名就是。啊,就是它好,然后呢,当然这个是这个类型呢,就可以调查的方法了,好我们来用一下啊,我们来用一下,看一下它的一个具体的使用细节,隐私类,好我们新建一个文件对吧?Play。对it影视类的一个DEMO,影视类的一个DEMO。好,我们新建一个主函数,诶主函数然后呢,我为了省事啊,为了节省一点时间,我把这些代码呢,先拿过来用一下,这些代码都非常简单啊,就写一个类,然后呢,我在这里呢,把这个隐私类啊,隐私类也很简单,其实就是我们原先普通的这个类呢,里面加了一个implicit的关键字啊,这句话我做一个解释。
04:04
啊啊这这这句话是什么呢?就是这有一个影视类,就d be d be是一个影视类。啊影视类,那么这个类会做一件什么事情呢?就会它会在当我们创建在它的作用域这个范围,就是在这个隐私类的作用域范围内,如果你去创建了一个MYSQL1这个实例,那么隐私类就会生效,啊干什么呢?就是当。当我们在该影视类的作用域,影视类的作用域范围范围创建,哎,我们范围干什么呢?我们创建创建这样一个MYSQL1类型的实例,实例是干什么呢?我们这个隐食类就会发生,就会起作用。
05:00
该隐食类该影视类就会生效,就会作用就会啊就会呃生效。这就好像对吧,以前我们我就想到这,我就突然想起一个特别有意思的一个现象,呃,就跟以前你们你们看过那个徐克拍的倩女幽魂是吧,看过吧,好多同学看过我们那个看现在你们现在可能看没看过,就好像说这个那个那个就是宁采臣进入到那个森林了,这个森林已经进入到那个那个那个什么那个叫树腰的那个范围,你你就跑不掉了,就有点好像这种感觉,就这个隐食类,只要你在这个影食类作用里面,你怎么创建影私力就给你框住了啊,你已经在我的功力这个这个这个范范围之内了,跑不了啊跑不了就这么感觉,那这个工作肯定还是我们编译器来完成的啊,这个工作,这个转换的工作呢,仍然是啊,仍然是编译器啊,编译器来完成的,那么我们先来讨论一下,当我们这样一做,这个影视类到底会长成什么样子,我们搂一啊,把这个影视类的神秘感给它打破。好,我们看。
06:10
看底层,看底层它是生成什么样子的,来,我直接给同学们运行一下。好,我们运行一把啊,运行一把这个地方,呃,怎么哦,这是这是前前面那个案例的错误啊,同学们给他注销一下,诶注销一下啊,因为我们前面写了一个代码呢,它本身是错的。好,运行一下,我们看这个隐食列到底长什么德行对吧?好,我们打开这一个啊,反编译的工具,我们搂。打开它。然后呢,我们找到刚才我们写的implicit的class DEMO。好,同学们可以看到有点意思了,你看啊,在我们这个地方它会生成啊,我们从这个主函数从这开始追吧,啊隐私类从从这个地方进。
07:03
这是它的入口对吧,我们以前讲过先进到这去,然后呢,找到主函数,同学们看这里主函数呢,它这边也是一个空的,因为我没有写东西嘛,所以这这是个空的,但是在这里我们可以看到有一个东西生成了。啊呃,生成了一个这样的隐私类,看这这个就是我们的隐私类。这个就是我们的以色列,能看清楚吗?就是implicit class DEMO db1 dollar2。啊,DB1DB1不就是你这写的DB1吗?那为什么他要写个DOLLAR2呢?DOLLAR2代表就是你是在人家这个啊main函数里面写的,所以它给你来个编号啊里面不就是呃把你传进去的,大家看我这这传的一个Val,那么Val它就会作为它的一个什么呀,只读的属性还记得吧,啊,实际上就是它的一个主构造器,而里面这个主告去看就生效了,然后这个it s呢,也给你提供了,好,其实就是这个东西看。
08:03
我们这一个主构造器就是它啊,传一个MYSQ1,然后我返回的就是这么,呃,一个需要的类型,好,这就是他的,说白了就是生成这么一个东西。啊,这个这个饮食类就是长这个样子的。啊,长这个样子的。好,那么我们来用它,下面我们用看它是怎么给它关联起来的,对吧?好,那现在呢,我们创建好,我们创建一个MYSQL1的实例。好,我们看看他有没有像刚才老师说的这个编译器啊呃,编编译器在仍然是编译器,这个工作仍然是编译器完成。啊,它有没有作用在这个MYSQ1的实例上呢?啊,看底层好,我们来写一个六一个啊六一个MYSQL1。它会做一件什么事情,好点VL,好给它来个MYSQL,我们可以看到啊,可以看到我创建它了,创建过后呢,我用MYCY点我COK,这是我自己的方法,没没有问题,现在呢,我看看这个I的suffx,我能不能使用啊,A这种我这样子来这个MYCQ1.i,诶你可以看到也是可以使用的,而且呢,又出现了一个下划线,那重点我们就是分析它到底是怎么关联上的,就说这一段代码怎么就跟它关联起来的,我们就研究这一个问题啊,我们就来研究一下。
09:34
诶,研究研究一下这里是怎如何关联的,就把这个说清楚就OK了,如何关联的,关联到哪个呢?这个DB里面的方法啊,好,我们运行一下代码肯定不会报错啊,因为都很简单。啊,你看我COK,下面这个代码应该也执行了,只是我没有去输出这句话啊,好,同学们打开我们这段代码,我们来搂一眼看看,主主要是研究那个关联的地方,其他我们都不再多说了,好,打开我们这个刚才的影视类的这个地方,进到这里面去,OK,好,同学们看这里。
10:12
看这里哦,非常的简单,你看到没有,其实它在这个地方就直接掉了,就一个d be1对吧,D be d be,这个就是它这返回的一个d be d be d be.MySQL把它传进去at surface。啊,S这个DB这个类型呢,其实就是我们这个这句话整个这一块。其实就相当于构建了一个影视类的实例。对吧,啊所然后呢,我就可以调用艾沙了,其实就是靠这个地方关联的。啊,靠这个地方关联的好,我们把它写到这儿啊,这个隐私类啊,这个是隐食类。好大体呢,就是这么一个逻辑,好大体就是么一个逻辑可以了,好就说到这就行了啊,大家看就是这么一个逻辑,就是相当于把这个MYQ传进去,然后呢,返回了一个这样的实例,然呢你就自然可以用它的S方法了,就这么一点东西,好关于隐私类的一个分析呢,我们就说到这里,我们截取啊,把这个给他做一个简单的。
11:20
这个这个整理好,刚才我们讲的是什么呢?讲的是隐私类啊,隐私类啊,隐私类还有几个细节,我们再回头再看一下啊,所带的构造参数有且只能有一个,不能多了。第二个隐私类必须放在内半身内或者包,对象不能是顶级,也就是说你不能把这个隐私类放到这儿,大家看你可以把它放在这个地方。你也你也可以把它放在外边,它也是生效的,但是呢,你不能够把它放在顶级,什么叫顶级呢?就是单独的放在外边,这是不允许的。因为你的隐私类如果放到这,它的作用欲无法确定是哪个范围。
12:02
那也就是说他失去了一个作用欲,你说这个放到这啥意思。对吧,你不能说这个作用句,它它作用整个这个全局,所以说呢,它必须是在一个类或者半生对象或者包对象里面都可以写,因为它有个具体的范围嘛,你不能说有一个有一个妖怪的法律,就是大多就把宇宙都包含起来了,他编译器没有办法,因为你如果这样写会出现一个什么情况呢?同学们,如果真的编译器支持啊,那就意味着你这个你你这个六只要六一个MYS全部都全部都要,全部都要作用这个隐私,隐私这个类了,是这意思吧,因为你的范围太广了嘛。那人家本身不想用电,逼迫别人用,这也是没道理的,所以说不是说编译器不能支持,而是编译器他认为我这个隐私类是一定要在一个范围,你不能让他整个整个这个程序都作用。那将来我们只要创建MYMY1它就作用上,这不合理,因此呢,这个地方我们是有一个范围的,就是刚才老师说的这个问题好,那么饮食类呢,不能是样例类,这个样例类后续我们再讲。
13:07
样例类,这样例类后面我们会详细介绍,呃,另外还有一个作用域类,不能有与之同名称的标识符,什么意思呢?就是说你这里写了一个隐食类叫d be,你就不能再有跟它相同的d be了,在同一个作用域啊,假设我在这写一个是没问题的。Class d be,好,这个我写呢是OK的。但是呢,你你不能够啊,你不能够说我在这个地方再去建一个d be啊,这个就不行啊,因为虽然它是个隐私类,但是呢,它仍然是一个类啊,所以说这样就重重名了。好,注意这几个细节,注意这个细节,好,我们把这个代码给大家整理一下。啊,饮食类,我刚才说了需要注意的几个地方。好,影视类聊一下啊,这是我们写的影视类。
14:01
影视啊。影视。影视类,好,来一个标题二,哎,来一个标题二,那么我首先做了一个基本的介绍。对吧,介绍里边呢,呃,我说了一下,就是饮食类有几个特点,有四个特点,那么第一个它的构造参数有且只能有一个,否则不能构成隐食类。第二个。啊,第二个刚才我们讲的是它的范围必须在这里面,不能作为顶级的这个类,因为你作为顶级类。他如果真的能支持,就意味着它的范围是作用在整个程序了,那也是不合理的。好,还有一个什么呢?饮食类不能是样例类,还有作用欲不能有同名的好,最后我们做了一个小例。啊,我们这边写了一个影视类的应用案例,进一步认识的引用类啊,影视类的使用。好,同学们,我把这个呢给大家板书到这个地方来,好吧,A标题三把你给他拿下。
15:03
案例就这案例呢,我这也整理了一下他的一个流程,主要是看这啊,主要是看这卷。这句话很重要啊,这句话很重要。好,我把它呢给大家放到笔记中。好的,截取,诶,这个东西怎么是两节呢?这怎么是这个东西啊。啊,这个地方是整一个表格上来是吧,删掉。啊,把这个表格先删掉,重新来找一个表格。好了,关于饮食类,我们就讲这些。
我来说两句