00:00
下面呢,我们再来看一个关于特质的一个使用方法,叫做自身类型,听这个名字就有点感觉了,自身类型就是self type,那么自身类型往往它是为了干什么呢?为了保护一种类型而产生的啊,就是为了保护类型来产生的,那么这个自身类型我们先来看一下基本的说明,何为自身类型呢?主要是为了解决,看我上来就提出这个东西了,他是为了解决特质的循环依赖的问题,好说老师这个东西特别不好理解。怎么叫,怎么叫解决特质的循环以来问题呢?同学们,它是这样子的。说我们将来注意听啊,注意听,比如说啊,我先把这个原因讲清楚,他这句话什么意思,我给大家做一点简单的描述,比如说吧,将来呢,我们这一个呃,C,这是一个类,我们继承了一个类,还混入了一个特质。这边就有一个问题,什么问题呢?编译器会感觉到很,编译器会会出现一个什么问题呢?假如啊同学们,假如这两者之间,比如说这个是A,这个是B。
01:10
因为刚才我们不是讲了一个关系吗,就是我们要求当这种情况下,这两者是不是要有相同的分类啊,哎,我们说这个刚才讲过了,但是如果说我们将来A和B之间,它们类型是相互引用。这就形成一个循环依赖关系了,明白我的意思吗?有有这种可能啊,比如说我有我有个负了是你,你有负了是5万麻烦了这个事。那么为了解决这个问题呢,就是在这个循环以来的问题呢,呃,马丁呢,这个他就搞了一个什么东西呢,他搞了一个叫做限制混入该特制类的类型叫self type啊self type。啊,这个玩意儿,他的意思就是说,我告诉我明确告诉编译器,你必须怎么怎么样好这个东西干什么呢?它它的作用就来了,他说他说告诉你啊,我。
02:02
我有一个特质叫log。这个都是干什么呢?我写了个this exception,我就明确告诉编辑我就是exception,如如果没有这句话呢,就我就是exception,以后谁想混入我,那么他也必须是exception,就这意思,就直接给编辑器做一个标记。这样就避免这个编译器在在进行这个处理的时候产生在动态,在这个动态这个处理的时候才会发生这个循环依赖问题。好,那么现在呢,我们就把这个案例给他说一下就行了,来举一个案例,好,我把这个代码就拿过来用一用啊呃,同学们呢,这个理解一下,好,我新建一个包。这个包的名字呢,我们就叫self。啊c SE l f self type,就自身类型,就是自己给给编译器告,就是相当于自己告诉编译器我是谁啊支持类型就好像你们去对吧,去干去去这个犯了事到公安局去了,你先说你是谁对吧,年纪多大啊,就这意思,好那么我们新建一个包。
03:10
啊,Self type的一个DEMOOK,现在呢,我写一个,好好注意听啊,也很简单,这些都是小点。好,我直接放这往这放一下,那么大家看log就是自身类型的特质,他写的这句话,假设没有这句话,同学们看这没有这句话,当然这个这个方法也用不了啊,这个方法肯定用不了,加上这句话的意思是什么呢?这句话的意思就是说我我是exception。啊,如果没有这句话的话,你这个也用不了啊,大家可以看到了,那么这地方有一个问题,就是说当注意听啊,当这里做了这个地方就是自身类型,当这里做了一个自身类型后,自身。啊,自身类型后类型后,那么那么干什么呢?那么就相当于啊,等他有点等价于这种感觉,他他有点等价于这个treat log。
04:10
Log,然后这个exception,但是这个语法呢,这个语法变成这种这种语法,它其实主要是。为了给我们编译器做一个说明啊,为了给编译器做一个说明啊,好,那么这个写完以后呢,我们就来用一下,那么这时啊,就要求。好要求呃,混入。就是混入。这样的啊,叫混入该特质的,特质的对象必须也是啊。类类也是什么呢?也是exception的这个之类,就这么一个用处,好我们来玩一把啊,我们来玩一把,看这个代码,看代码,那么代码呢,也很简单,我就这两个小案例已经准备好了,我们先看第一个。第一个,同学们可以看到,第一个上来就直接报错了。
05:04
啊,这第第一个上来,我们可以看到这个啊不,我这个我们写不不写到这啊,写到里面应该是这样子的,好,第一个它错了,为什么第一个错了呢。好,我们这个地方。你写的一个class,你的class什么类型?你没有任何负累,你不是这个ex,我这个log是一个except,你在混入的时候,你不是一个except之类。啊,所以说要求混入该车,这必须是ex上你不是啊,也就是说他在混入的时候,他不但要求什么呢?他不但要求你,他就要求你这个类就直接是这个类了,而不是说其他方法,你看这个em就是一个普通的意思,他们就错了。这就是错的。就说你在混入我,你必须首先得是一个except,你不是。你不是,你不是说我,你继承了我过后才是他的,这个要求比原先那个应该更严格。
06:06
对吧,比原先的更严格,就是这样子一个意思,那下面这个为什么可以用呢?因为我先继承了三,我再混入,这就没毛病啊,这个地方就没有毛病,好这个地方都我这是空的啊,你也可以加加加这个东西也是可以的。好,就是这么一个作用啊,就这么一个作用,那它的作用我再说一遍,它主要是为了防止你在混入的时候,两者之间进行一个嵌套的使用,好这个呢,用的也不多,大家大家知道就行了啊,不要去再研究了,我知道这个地方要去往下研究,同学们,很多同学会晕菜的啊,晕菜的知道这个东西就行了,以后看到这个语法就知道这是知识类型,再知道一点什么呢,再知道将来我们要去混入这个log,这个类,首先得是它的一个之类就可以了。就可以了,好,这个代码我们就聊到这里来,给同学们板述一下就完事了啊,自身类型。自身类型呢?我举了一个案例。
07:00
自身类型。好,板书到这里来。讲了一个自身类型。啊,自身内心。好,然后呢,我做了一个说明。啊,这个用的用的不是很多,大家知道就行。然后我这举例举了一个应用案例,对吧,这个案例呢,就说明很多问题了,直接把它拉过来。好,直接把它拿过来,放到我们的这个板书里边去。好,不要去过多研究这个东西啊,我再说一遍,不要过多去研究这个东西,你只要记住这个一个语法,第二个记住怎么用就完事了,不要去过多研究这个东西。啊,有些同学就去研究这个没有没有必要,好我截取一段。
我来说两句