00:00
好,那么关于泛型的话呢,我们下边还有两个知识点,咱们把这两个知识点呢给大家说一下啊,第一个呢,叫泛型在继承上的一个体现啊,这里边呢,其实主要呢,就说这样的两个问题啊,因为这两个问题呢,我们再引出来的关于零四角通配符的一个使用啊,那首先呢,我们来说第一个问题这块,我们通过这个代码呢去写啊,Generic。啊,它的一个测试啊,好过来这儿呢,我写个单元测试方法啊,这个呢,我们讲这个继承性,其实呢是继承多肽这块都有体现啊,咱们先回忆一下前面讲过的一个知识点。啊,因为呢,这个泛型呢,我们也只能是用引用数据类型来充当,所以这块呢,咱们就说引形数据类型这块,这块的话呢,我们说有这样的这个特征啊,比如说我这是一个专业类型的啊,我叫呃这个OB接吧啊,我写的很闹了啊,然后呢,现在我有个死论类型的叫itr,具体这个值的话呢,右边我就没负了,这不是咱们说的重点啊呃,关键的话呢,我们就看这个类型的话呢,由于object呢是string的类了。所以呢,我们可以体现这个多肽了。
01:01
也就是说我们这个I2呢,这个变量它呢,是可以付给咱们这个OB的。这个呢,就是体现了我们基于继承的一个多态的使用。对吧。啊,基于继承性的。哎,多肽的一个使用或者叫体现都可以啊,这呢就把子类的这个对象赋给了父类的一个引用了啊,当然这个问题当中,实际上你可以去你有一个这个对象是吧,这都可以啊。比如这写了个A,相当于把这个A呢就付给了我们的obj了,这呢是一个场景。然后呢,还有这个场景呢,就是我们讲的这个数组的这种场景啊,所以现在呢,我把这个相对应的这个object也好,String也好,都替换成这个数组了。真的是个闹。啊,现在的话呢,我有个死针类型的一个数组。哎,这个暂且的话呢,我也写成这个闹了啊,那你说现在这个AR1能复制给AR吗。能付给前面不?就是没写过是吧,可以的啊,可以没问题。这个呢,其实理解的话呢,就是诶我们整个呢,这个结构啊,这个其实你说整个付给他也行,或者说这里边儿每个元素都是object类型的啊,也都是行啊,所以这块也可以理解成叫基于基于继承性的一个多态性的一个体现了。
02:13
啊,这两个这都没啥问题,咱们前面呢都讲过了,咱们现在要说的呢,是这样的一个场景啊。呃,这个场景的话呢,我们先这样来看,比如说咱就拿现成的这样的一个类了,叫做a release,以它来说,我这个位置呢,写上了一个object,这个我叫LIST1啊,右边呢,暂且我都写成是这个闹了啊,咱们先不关心右边这个具体的值,主要呢看一下这个能不能赋值的问题。然后现在我又写了一个叫。这个位置呢,我写的是一个string是吧。这个人叫LE2。哎,也写这个到了哈,现在呢,想说的就是这个,呃,LIST2能不能复制给这个LIST1。是吧,这个例二他能不能复制给他。能不能呢?
03:01
哎,实际情况是不可以。是吧,哎,这个呢是不行的啊,这个会报错了。这个能理解吗?嗯。啊,这个有的同学可能会这样想啊,诶说这不不合理啊,我们这个里边呢,我添加的是string是吧。那我添加string的话呢,那不都认为是object吗。说这不跟这块有点像吗?你这里边添加都是string string,这不认为是,这不应该可以吗?这这块应该可以呀。啊,如果说你拿这个呢,这个说呢,似乎呢有那么点道理,但是我们要换一个结构呢,就不是这么回事了。什么意思啊,你比如说啊。我这块又建一个,咱们来一个这个叫person吧。哎,Person这块呢,我写成个泛型了,有个T是吧,好,那有string类型的name。啊,T类型的一个小T,哎,小T这块这个T呢,具体什么类型呢,这个咱们是不确定的吗。啊,那么回过来,那你这块你看类似的这样一个问题,我这写个三哈,这是个person,我这儿写的是object。
04:05
啊,这张我叫P12吧。啊,复制呢,这是个no是吧,然后这呢是一个person,这呢你写成这个string是吧。哎,这叫A1。咱写成个他是吧,所以这块呢,这P2。一啊,能不能付给P2,那由上面的经验来讲呢,说这个也不行。啊,因为这里边儿呢,你完全就是不同的这个属性类型啊。是吧,所以这块呢,你是不能够这样的去应赋值的。啊,就上面那容器,你觉得说好像可以,那现在我换一个不是容器了。不行。啊,这个大家注意一下。当然了,有同学说这个我还是有点不太能接受。啊,不太能接受,举一个生活中的例子呢,这个例子呢,我感觉其实也不是特别恰当啊,啊比如说这有个垃圾桶是吧,这个垃圾桶呢,就好比是个啊这一种呢,这上面标签呢,就什么都能扔。啊,另外一个垃圾桶呢,这上面说呢,只能够去扔这个叫比如厨房的垃圾。
05:00
是吧,厨余的这个垃圾,呃,说这个呢,这个垃圾都能扔到这里边儿吗。感觉上也可以是吧,但是整体来看的话呢,就是这个跟他呢,是不具备这种,咱说要想用这种呢,其实是一个多态的场景一样是吧,但是这个呢,它没有这种集成的关系,这是两个并列的类啊,就是这个你放任何的是这个,这个呢放呃这个厨余垃圾是厨余垃圾,你可以说呢,这个具体的对象是这个类型的啊,一个子类了。满足多态,但是你不能说整体呢,又包装一下这个容器,是这个容器的一个子类。这是不合适的。这个例子呢,确实差点意思是吧?啊,那咱们呢,就从代码层面呢,咱去理解一下啊,为什么这个事儿不行呢?咱们还可以理解成是个规定,但这个规定为什么来呢?咱们还可以呢,说叫自洽DG呢,就是这个事儿,如果要是允许我们去写的话呢,可能会有问题哈。那咱们其实呢,就说这个问题就行,那这个问题呢,咱们就还是这个叫反正法呗。
06:02
哎,反正法其实这个反证法呢,就是大家学数学的时候应该都讲过是吧,以前上中学的时候啊,这个方法呢,当时刚接触的时候。觉得很神奇是吧。就是我们想证明一个事儿是对的话呢,你发现呢,其实有时候很困难。你怎么证明他是你爹呢?你怎么怎么证明这个人已经死了呢,是吧?就是有好多这个大家去办一些业务的时候呢,就发现这个事儿就很闹腾是吧?啊但是这块呢,这个反正法呢,相当于是你证明它是对的呢,可能很困难,但是想证明它是错的话呢,只要有一个返利就可以了,是吧。啊,所以这个呢,就比较容易哈,相对应呢,大家可以延伸一下,你比如说呃,我们这儿写了一个这个操作系统吧。是吧,啊就比如说这个iOS这个系统以前的时候呢,IOS每发布一个新的版本,然后就有一些黑客呢,就开始呢,去把它破解是吧。啊,找他一些漏洞啊,进行一些攻击等等的,那刚开始的时候呢,你说诶这个小的以他为例哈,你说这人说还没有这个黑客厉害呢是吧。
07:01
其实事后你想想的话呢,厉害的还是谁啊。还是这些人是吧?诶,这个呢,其实相当于这就好比一个城墙一样哈,这个城墙呢,你想把它每一处都得考虑到,这个人呢,其实他要想的事呢,就非常的多,但是所谓的这个黑客呢,就好比是呢,有时候咱们看那种战争片哈,就有一个下水道没考虑到。然后这个呢,拿这个炸弹呢,下水道这块一炸啊,可扣就开了是吧,这个呢,相当于黑客呢,他就只是抓到他一个小漏洞而已,你让他去建这个城墙,他可能建的更长是吧。所以厉害呢,还是这个整个的这样一个体系啊。啊,其实呢,大家在这个Windows操作系统上呢,现在诶,我这是十,大家好多都开始用这个WIN11了哈,从这个呃WIN7开始,当然在之前这个叉P呢,包括很多蓝屏啊,包括呢,有好多这个漏洞啊,确实很容易被攻击啊,实际上从这个WIN7开始,再往后的这个版本啊。大家其实也不用刻意的去装这个杀毒软件了。啊,包括你看微软哈,他自己呢,都有能力去开发这样的一个操操作系统,他其实都没有直接的去写一个杀毒软件是吧。
08:01
杀毒软件你看都用的是其他家的。啊,因为他从自己的思考上来讲呢,我建设杀毒软件去,我们去给自己呢,去弥补这个漏洞,那我还不如直接把这个系统呢,写的更坚固一些,所以他自己呢,不发布杀毒软件是吧,不挣这个钱啊,他把这个系统呢,其实构建的已经是比较安全了。啊,所以大家呢,其实WIN7之后呢,不用刻意的去装杀毒软件了都啊。好,那这儿呢,其实就提到这种反正法,实际你找到一个漏洞啊就可以了,那现在呢,我们也一样,我正面的去证明说这个结构呢,这样写示不对的,有点难度,那我反正法啊体现这个四下,那就是说假设呢,这个写法是可以的。啊,假设是吧,咱们这个LIST1拿这个LIST2呢,去赋值是可以的,那么大家看呢,会不会出现什么问题。你比如说我们这个LIST2这块呢,咱们实打实的就new了一个叫a list这样写的,相当于它呢,就有一个容器了啊,那假设这个事儿要行的话呢,你看我们这个LIST2呢,你要去艾特这个数据,你只能是添加词缀了。因为它这块呢,不是有这个限制啊,是死润这是没毛病的,但是呢,你要是这个利一呢,呃,也能这样负,那就意味着我利一呢也指向了它。
09:09
也只扬你这个容器了,但是呢,我现在呢,声明的是object,扬呢,就我这个例子一呢,我再去艾特的时候呢,他认为我这是object。他既然我们了,那我是不是就可以整个123啊。那我要整123,实际上你把123是不是就放到这个容器里了。那你说我这个发型是不是白加了?是吧,你刚说加了泛型限制,它里边操作类型。只通过这样一个非常简单的操作,就绕过这个泛型了,那你这块呢,如果我们再通过这个例子二,你去get一下这个角标一的这个元素,假设这个是要行的话呢,那很显然呢,我认为这是个死缀呢,但123显然不是个死盾呢。啊,那这时候我们得到这个事儿呢,他不就错了吗。哎,就因为这个事儿一旦行了,这个事儿就也行,但实际上呢,这个事儿是不应该可以的是吧,这呢就相当于。啊,相当于我们这个取出的。
10:02
这个123是不是赋值给了。啊,这个我们说IT2了。是吧,这是错误的,那这个要错的话呢,那往前推,只能说我们这个假设错了。那就意味着我们这个事儿呢,就是不行。啊,为了我们整个的语言的一个自洽啊,OK。行,这个呢,咱们就说清楚啊,这两个呢,注意是并列结构的啊,所以回过来在这写啊,所以呢,这个类。是A类的这个负类,则这个结构它的关系呢?哎,我说对他和他之间注意是没关系的啊。啊,它呢是并列的两个类,没有任何子赋类的关系,阳岸之呢,你就不能以多肽的方式呢,互相去赋值了啊这是咱们刚才举的例子呢,就好比是这个这呢就好比是这个a list是吧。啊,以他为例,然后这个位置呢,我们写的是object。
11:01
哎,就跟它和我们刚才写的这个还是一个a list。这个人写的string,哎,他俩之间呢,就没有关系啊。诶就可以了,好,那要是有这样的一个点的话呢,大家呢,你后边呢就得注意了,比如说我们这有个方法啊,我这叫method了,这个方法呢,我就写明是一个叫AR。啊,这个位置我写的就是。啊,你以为它挺有通用性的,其实不然,这个方法呢,我们在调的时候呢,你看我们在这如果写这个method,是不是我只能是把上面的这个LIST1放进去啊。那我要是把上把这个例子一放进去,我要把这个例子二呢,想往里放,是不是就报错了?哎,这个呢,你看就不行。啊,他不行啊,因为呢,这个object跟你这个呢是没有关系的。啊,这个大家注意一下啊,这是错误的。但似乎呢,我们感觉呢,说要加上泛星以后呢,好像这个通用性呢,是不是就差一些了。有点这意思是吧,好的啊行,这个说完之后呢,我们先不先不说呢,怎么去解决这个通用性的问题,咱们先说一个另外的场景啊,这呢有这样的问题,把它俩反过来了。
12:10
现在现在呢,我们这个呃,Super a呢,还是A的一个负类,或者是它的一个实现的接口了啊说我现在是这样写的。诶,刚才那个是G在外边泛,呃泛型的用的这个磁浮类了,现在呢是这个外边呢是磁浮类,然后呢,监括号里边写的是G,他俩之间是什么关系。对他俩之间呢,是有这种集成的关系,或者要实现的关系了啊,它指的是这个意思了,这个我们是这个四啊。这个说的是这样场景,比如说我现在是个list,这呢我写的是。最后加LIA1。诶,咱们写成是个闹了,然后呢,我再写了个叫AR,哎,我还是一个盾。哎,这么着,然后这叫LIST2,哎这块呢,比如说咱们给它用好了啊,这么着说现在问题就是我们这个例二能不能复制给LIST1。对,这个呢是可以的。
13:00
啊,它俩这个泛型的是一样,说明它里边呢,这个属性呢,都是死string类型的了,是吧?诶涉及到的这个属性啊方法呀等等都是死string类型,大家都是一致的,都是确定的类型,那么你只需要看前面就行了,前面的话呢,他们有此汇类的关系,或者是继承啊实现的关系都可以,这呢就可以用这个多态的这种场景。所以呢,它是不报错的啊,换句话说啊,这样写的话呢,也没有问题,你比如说我们有这样一个操作之后,那么这个例一不就指向他了吗。那我通过这个LIST1,咱们去ADD的时候,哎,我这呢,是不是也只能是放顿是吧,写个A,这个A呢,就相当于放到我这里边了,我也是顿,所以咱俩没有问题。不会出现咱们上面出现这个,反正里边证明这样一个错误的场景啊。所以这就可以用啊,那这个大家呢,以后呢,该用的时候还用啊,那就意味着比如我们现在啊public。哎,这个word一个method这个位置呢,我写的是叫list,写了一个string。这么着啊,然后呢,这个方法method,我就可以把这个例二呢给它扔进去。
14:02
哎,这是没问题的啊,主要呢,看前边这个结构啊,好,那么回过来对应的这个总结就是它了,哎,那么这个时候呢,我们说这个结构是吧。哎,或者他呢,是。差两个啊。CTRLC啊,它与它。哎,这个我们说呢,就有继承或实现的关系。啊,那言IG呢,即咱们这个它这个的实力是吧,可以赋值给啊咱们前面这样的一个生命的变量。啊,这个啊类型的。哎,它的一个引用是吧,或者叫变量都可以啊。哎,变亮啊,这样都可以好,这个举例的话呢,就我们刚才说的这个场景。啊,比如说刚才说的这个list,这呢写的是个string啊。哎,它呢与咱们这个叫A还是一个string啊这样一个关系啊。
15:04
好,那么这个事儿呢,我们就说清楚了啊,把它呢,CTRLC咱们回过来,为了方便大家看哈,咱们这儿呢,说的是。这个事儿。嗯,就他啊,然后上面这个。诶,CTRLC啊回过来。来放到我们的这个位置啊。上面这个呢,就我们回顾的之前的这个知识点了,行,这儿呢,就可以列解成我们这个泛型在继承上的一个起线啊,这个大家熟悉一下。好,那么这个点完了以后呢,我们接着来说下个点啊,下一点呢,这个叫通米福的使用啊,它怎么去理解呢?诶大家你看我们刚才提的这个问题啊,说呢,由于有了这个反应之后呢,我们突然发现呢,诶貌似这个结构呢,通用性呢很差啊。我这是一个。然后呢,这写的是object,然后我现在我也有个release,但是我这个发型呢是string。这样的话呢,就导致我们现在这个结构哈,例子二呢,没有办法复制到这个位置,导致我们像这样结构这个方法呢,适用性呢,一下子就降低了。
16:03
啊,那怎么办呢?哎,如果我们这块呢,想起一个通用的,我就是操作例子的,但这块又让用泛型,这怎么处理啊。诶这块儿我们就想找说对于这个结构和这个结构来讲,说有没有可能性他们存在一个共同的一个像是一个负类的结构一样,这样的话呢,我们两个变量呢,就都可以付给那个变量了,进而的话呢,这个位置呢,我就写他们共同的负类。大家就都可以多肽的方式呢往这儿放了,使得这个方法呢就更具备通用性。好,那这个想法呢很好,这个想法呢,其实就只需要呢,把这个位置呢,指明成一个不确定的类型,在我们这儿呢,实际上就是一个通配符了。啊,这个通梅福是谁呢?就是一个问号。哎,翻译过来呢,我们叫做通配符。OK啊好,那下边我们就来举这个例子了。啊是吧,关于他的测试一。诶,关于这个通配符它的一个使用。
17:00
单元测试啊。哎,OK啊好,这个怎么去使用呢?呃,首先呢,从它这个具体的这个格式上来讲的话呢,只需要呢,我们就呃,你在相应的这个类的声明上。是吧,哎,或者我们有了这个发型类了,然后呢,你具体呢,在写的时候呢,这就相当于一个比,比如说具体的一个举例了。啊,举例的话呢,比如说我们这个叫array。List,然后这个位置呢,原来我们是写一个具体的类型,现在我们只需要呢,写一个这个同位符就可以了。哎,就这样个格式啊好,那有了它以后,那么回过来我们看这块儿呢,使用会怎么着呢。哎,现在的话呢,我们就拿一个例子来说吧,这个位置我就这样写的啊,写成个例子了。哎,没问题啊好,然后现在的话呢,我写一个叫object。这叫LI1。哎,写一个。哎。那这个叫例子二,哎,就这样处理的行,那我们会发现呢,这个list呢,可以使用这个LIST1呢去赋值,也可以拿这个例二呢去赋值。
18:04
啊,那有这样的一个特点,不就意味着我们现在如果定义了一个方法,这个方法呢,写的是个list,这呢写的是它。哎,是这么着的一个结构啊,然后呢,我们调这个方法的时候呢,这个例一和这个例二呢,就都可以放进去了。哎,就具备这种通用性了。OK啊,然后这个里边呢,你做什么事呢,比如我们去遍历一下这个历史中的元素。是吧,是可以的啊,便利呢,相当于这块呢,我们就说另外一个事呢,就是取出它这里边儿这个数据了。诶,但是你看啊,我现在这个呢叫list。啊,首先呢,它可以作为我们这个例一例C2的共同的,咱可以理解成相当一个负类一样了,是没问题的啊那现在我要取出这里边儿这个数据说能取吗。哎,就是就这意思,就我现在相当于这个例子,拿着例子啊,我去get一下这个角标零,比如说。
19:00
像这种吊法可以不?有同学说你这块也没东西啊,哎,是咱们目前这没东西,那我可以呢,给他去拗一下呗,举个例子啊,比如这块我们是个是吧。咱们把这个呢,先暂时注释一下,我相当于把这个例二呢,是不是复制给例了是吧。输入给他以后的话呢,这个例子呢,就指向他了。然后呢,这个呃,比如在这啊这个例子啊,这个咱们这样吧,我把这个笔记给大家就先留一下啊。这么着这个位置呢,咱们先我开黄阳城,咱们这个闹。哎,咱们在下边儿这块来说这个事儿啊,这个TEST2。在这写啊这个样子的啊,首先的话呢,还是有它。嗯,然后呢,这块我们整一个这个啊C。这个叫丽一吧。哎,这个位置呢,我们就要扭一个。叫a list啊好,然后呢,现在这个LIST1呢,假设我们往里边添加了一个A。诶加进去了啊,然后呢,我这个例子呢,拿这个例子零一呢去赋值,相当于我这个例子呢,现在也指向它了。
20:04
里边呢,其实应该有个数据是吧,你说现在我能通过这个list去获取这个A这个元素。这个相当于呢,我是不是想读取数据啊。读取数据呢,你看我通过这个list点我去get一下这个写个零,我能拿到这个数据吗。应该没啥问题是吧,那问题是现在我拿到以后呢,这个类型你说怎么写。你说呢,这不是个string吗?那就写string呗,但是你发现了我写完string之后呢,他给报错了是吧。嗯。这个报错为啥清楚不?哎,因为啊,你看我们个盖的方法呢,它的反应类型是个E,这个E呢,就是我们类的那个,或者叫接口的那个泛型了,我这写的是不是问号啊。所以说你这个E呢,按说呢,也应该是问号了,那就意味着这几个问号。这也没有问号类型啊是吧,我们这个标志符里边类型啊,它都没有这个东西,那那怎么着。
21:05
对,问号呢,你就可以列成叫不确定的类型。那不管你是什么类型,好歹你一定是个引用类型吧,引用类型呢,那就一定是object的是吧?所以这块我们就写成object,可以这样写。那就可以了,当然了,你也可以说呢,我也不太清楚,我就把光面往这一放,我就out回车了。还是要展开的是吧。哎,所以呢,就是一个object。就是我不知道你这里边儿具体什么类型,但是呢,你肯定是一个object或者是它此类的类型,所以这样写没问题,当然了,你说我这块强转可以啊,因为你知道是个string吗。这个时候我要去打印这obj肯定那个AA,那不就出来了吗。没问题是吧。就相当于我们在这个集合里边,咱们去读数据呢,没问题啊。哎,那么可以了,下边我想看能不能去写入这个数据。哎,这个读取数据是这个,咱们是以这个哎集合为例说明的哈。
22:03
因为我们在集合中用泛型的用的比较多一些啊。那我现在呢,拿着这个list。我想往里边去,艾数据。行不?是吧,你看这块爱的时候呢,按照我们的理解,是不是你得写个问号类型的呀。那这时候的问号,这是啥类型呢?不确定是吧,那能往里写吗?你说那你写个字符串总可以吧。字符串呢,那我也不知道你当初是拿字符串付的呀。这哪知道啊是吧,所以往里边写,你看是不是就不可以啊。这个注意啊,当然你要说,诶,我这问号不确定,刚才不是说热类型,你要把它理解成,那更不能让你写了。那你整个123,这不就坏事了吗?对吧,诶,所以这块你发现呢,我们带通配符的这样的一个集合的一个类,我们想往里边写数据呢,是不行的。那你可以这样理解啊,比如说大家呢,去楼下这个扔垃圾了是吧,这个垃圾上面这上面明确写着啊,这个呢叫厨余的垃圾啊,你直接往这扔肯定没问题,但如果你现在有个垃圾桶,上面呢写了一个问号。
23:13
啊,假设你要往里扔的话呢,咱脑洞一下啊,它就给你喷出来了是吧。你肯定不敢往里扔吧?你怕他万一喷出来咋整是吧?诶所以说这块呢,对于我们这个编译器也是一样哈,编译器的话呢,说我现在能添加添加啥呢,添加问号就行。问号是啥类型的,不知道啊,不知道编译器就不敢让你添加。所以呢,你就不能添加。啊,但是我说有个特例。对,这个特例呢,就是no。哎,能理解吧。诶,就是不管你这个问号是什么类型,总归你是个引用类型。只要是引用类型呢,大家都有一个共同的值。就是nor,所以呢,我可以加nor。啊,所以它呢是一个特例啊。诶,可以将尿纸添加剂。
24:02
集合中啊。或者叫写入啊,这个集合中,但是一般呢,咱们这个闹纸你写一个也没啥意义是吧,所以一般呢,也就不考虑去写入了啊,所以说这个写入的行为呢,注意是不可以的啊。啊,写入。这个数据啊,这个我们说呢,诶操作失败,诶理解成呢,就是不允许往里写啊回过去好这块的话呢,我们具体这个使用的话呢,首先呢,举了这样例子,然后呢,我们说啊,比如说啊,我这块呢,有一个G的啊一个这样的一个结构是吧,它呢可以看作是啊咱们这个GA。啊,这个类型的一个类一样是吧,即啊可以将。啊,咱们这个GA。哎,它的一个啊对象啊,赋值给啊咱们这个G。哎,这样的一个格式的一个类型的一个变量啊。引用啊或。
25:01
哎,变量。诶OK啊行这呢,就我们说的这个具体的这个使用的这个场景了,然后呢,刚才我们说了,如果呢,要这个集合的话啊,读写数据这个特点,这个我们刚才也说了啊说呢读取数据这个呢,我们是允许的。啊,然后呢,哎,读返回的这个值,或者叫读取的这个值的这个类型为是不是object类型。啊,就是以这个我们说通背符这样一个格式哈,这样方式要读的话呢,这不读出来舍不寨类型吗。这个写入数据。这个呢,我们说是不允许的。啊,不允许的是吧,然后特例这个是咱们说的,可以写入闹纸是吧。啊,这个以集合,比如说哎,咱们叫啊a release这样的一个以它为例是吧。说明的啊,好,这个事儿呢,我们就说完了。啊,说完以后呢,你看回过来,刚才我们在上边这个位置啊,我在这个的。
26:03
这个位置就我刚才说了啊,说在这个例子里边呢,我下边假设在这个集合方法当中,我想把这个集合给遍历一下可以吧。便利不就是读嘛,读就可以是吧,对,那就意味着我这块呢,呃,写增加for循环的话呢,那你这就object呗。哎,丽A。哎,这呢,你就打印一下这个obj就可以了是吧。哎,这是没问题的哈,写这个话呢也行。啊,那个记记发型就是。这就举了个例子啊,能读,但是你不能在这里边呢去写啊,拿着这个例子点我们去艾往里边去写,这个呢是不行的。啊,因为你想这个位置都不知道什么类型,你写string也不合适,写什么都不合适,唯独呢可以写个no是吧。啊,这个是错误的啊。好,这个事儿呢,我们就算是输完一半了啊,然后呢,如果我们看这个API的时候呢,可能还会见到类似于这样的结构,这个咱们就CTRLN,咱们就以这个叫collection为例吧。咱们看一下,目前咱们要去看懂这个的话呢,有哪些东西咱们还不认识啊。
27:05
哎,这个我们就随便找哪个版本都行啊,进来以后啊,这呢,咱们都认识了,这个往下我们看看这个方法啊,这也认识。这是翻译方法吗?是吗?你说带金花号了,这就是啊。看清楚啊。是吗?嗯,把东西又还给我了是吧,这个是吗。这个是。在这写的是吧,你得在返回类型的前面啊。写这这这写这不不算吗。这不就是纯法问类型吗?只不过呢,这个呃,这个这个法问的这个类型的话呢,它也在泛型了,人家又加了一个泛型。对吧。啊,这个注意这不是啊,别见了铅块呢,就感觉是反应方法,那你看写哪儿啊。你看咱们,呃,写那个我看是do的这个例子吧,在这里边呢是吧,咱们写这个do这个例子的时候呢,我看一下。
28:06
嗯,看这个点有吧。那这个咱没有这个例子是吧。嗯,我写的这个do。嗯,看他不行看吧。Order,哎,这是他是吧,然后呢,我们这里边呢,写这个的时候啊,看这啊如果呢,嗯,我要是把这个位置给去掉的话,你光看这儿的话呢,这不行。啊,这个呢,只是它的返回值类型,只不过人家这个类型这块呢,咱用了一下泛型而已,啊,不能说这块就是反应方法了,你得看你前边有没有这个结构。啊,这个大家注意一下啊。好,还回来看这collection,这不是翻译方法啊,只不过它使用了类接口的泛型而已。走啊,这个才是反行方法。看这。好,然后呢,再往下走,嗯,再往下走,哎,这呢,就咱们说的通配符嘛,是吧。嗯,再往下走,哎,这块你看还能看到这样的结构。
29:03
啊,这个呢,就理解成叫有限制条件的通配符的一个使用了。啊,你看还有这样的结构是吧。诶,那下边呢,咱们把这两个结构呢,稍微的再提一下,因为我们在这个相关的这个代码当中,可能会见到这样的这个场景啊。好,那就是这样一个情况了,这个呢,还是写这个例子。回到咱们的generic这儿啊。哎,这个往下写啊说呢测试这个呢,叫由限制条件的通配符的使用。上面的是咱们测试通配符的使用啊,这个往上写一写啊。诶,测试。哎,通配符那就他是吧。的一个使用。回过来啊,我们看一看叫有限制条件的同位使用,这个指的呢,就这个呢,就是没有限制条件了,然后呢,如果我们加一个叫tens具体的一个A啊,还有呢叫诶叫super一个A是吧,这个呢算是就有限制条件了。
30:06
这个其实不太难啊。我们举个例子,大家就清楚了。写个三。好,比如这个位置呢,我们写的还是一个list吧。嗯,这块呢,为了举例方便啊,我这么着这是一个了是吧。这是一个我来了一个T,然后咱们再换一组这个例子吧。这个呢,我来一个,比如说叫father。这是一个类,然后我再来一个丧是吧,儿子是吧,让他呢去继承咱们这个father。好,这呢,你看有一组这个子浮力啊。那么回过来在这个位置呢,我这样去写啊,这呢叫通背符,咱们现在就要有现实条件的哈,我就要CE一下,这个叫。Father是吧?这叫一。啊,写这个闹啊。呃,先拿先拿它来说吧,然后我现在呢,去声明list呢,先写成叫object。哎,这呢,叫这个叫list。
31:01
这叫离子一。写成个no啊,然后我再复制几个,这个呢写成叫father类型,这个呢是这个丧类型的。这个叫二,这个叫三行,现在话呢,我们想看一看啊,这三个变量谁可以复制给list。哎,试一下就行是吧。你看看谁行谁不行,一目了然。第一个不行。就相当于呢,我们这个问号的话呢,相当于是father类的负类不行是吧,本身呢是father他这个也行,丧类也行,这个呢是不可以的。所以这块呢,我们可以呢,大家形象点理解啊,你把这个呢,Exce呢,就想象成叫小于等于。小于呢,就像它的子类,等于呢,就是这个类本身是吧,所以呢,我们相当于可以把这个诶发的这个类型呢,或者是它的这个子类的复制给他。啊,这是它的这个场景,好那么类似的,你看CTRLC,我们再复制一份啊,这又来一个叫四了,咱把它那改成叫super啊。
32:07
血泊写完以后的话呢,你看我把他们仨再打开,发现呢,这个不行了。就是这个子类不行是吧?对,相当于呢,我们把虚空理解成叫大于等于。诶,Father可以,然后呢,这个father的负类呢是可以的。所以呢,这个是可以。哎,子类呢,不行。啊,这个注意一下啊好,那这个说完之后呢,回过来这个事呢,我们就好写了啊说有限制条件通配符的使用,这个呢,结构我们说呢,它呢说可以将。啊。一个呢,是我们这个list。A是吧,或我们叫哎list b啊,咱们说那叫哎负值。给啊,我就写个list它了。啊。这个A这样这呢,我们得说明一下啊,说这个其中。咱们这个B类呢。
33:00
对,它是这个A类的。子类是吧,哎,这样情况啊,好,然后对应的这个场景呢,我们同样的把它的CTRLC粘过来,可以将这个复制给它,其中的B类是A类的。哎,负累。哎,这就可以了。OK的是吧,好,这个要清楚以后呢,大家你要后边呢,再去看我们这个叫collection的时候啊,比如说我们上面遇到这样的场景了,这个呢叫at all是吧,就是添加啊,添加的时候呢,这时候你这个,哎,如果我们现在是前面这块呢,我对应的是一个release。这个可以吧。就是我现在有个一个对象,我往这放啊。可以,因为这呢,看这个是子类关系是吧,好然后后边这块呢,假设啊,我们调这个方法的这个,呃,对象它的这个E呢,假设指定呢,就是一个father类型的。哎,那我现在这个release呢,如果里边放的是这个丧类型的。是不是就可以付了?对,要发的类型也行是吧,但你如果这块呢,是一个object类型的话呢,你就不能往里付了。
34:05
这也很好理解啊,你看我这呢,如果是E的话,就意味着我们当前这个集合,我只能够来先加这个far或者father的子类,子类对象嘛,所以这个位置你要放的话,你放father也行,放子类对象也可以。你要整一个father负类呢,你这个加不就加到我这里了,我这里边儿只能是father。是吧,那就不行了,所以很好理解,这个呢,要extend是吧。行,这个呢,我们就清楚这个事儿了。啊,这个事儿清楚以后呢,其实也就差不多了哈,当然这块呢,因为我们讲通配符的时候,咱们讲过读写的情况,那咱们这块儿呢,也看一看这个有限制条件的,它的一个读写的情况是什么样。这块呢比较难。哎,看看能不能上去啊。这儿呢,是咱们这个这种方式哈,那我这块呢,就写到这儿吧。诶,针对于。哎,针对于这种格式的一个读写啊。
35:03
然后呢,看一看,这让我写一个单元测试啊,三杠一。就写这了啊。好,什么意思呢?嗯,我现在有一个他,我CTRLC。转过来了。没问题是吧,好,然后呢,比如说我们有一个具体的这块呢,一个实体了。那具体的一个实体呢,可能是一个长这样的。啊,就是这个呢,我们可以呢,具体的就不说的那么细致了啊,他肯定是有一个具体的实体了,然后现在呢,我们就把假设呢,拿这个例二呢,我叫一吧。把单上复制给我们这个例子呢,像这都没问题哈,呃,现在我们还是想看这个叫读写的问题。哎,我这个list能不能读数据。呃,例的话呢,如果我们读就是get是吧,我去角标零啊,假设我们这里边呢,还确实有一个数据啊,通过它点艾特一下,我new了一个具体的叫a father的一个实例嘛。
36:06
哎,相当于我签了个对象啊,这个我们要盖的时候呢,哎,如果要可以的话,那你说一下反应类型啊。写什么是最精准的呢?是吧?哎,对啊,其发是最精准,或者你光标放这我al加个回车。那没问题吧。啊,因为呢,就是你这个呢,是小于等于这个father,所以说你可能是个丧,也可能是比丧还小的,但是也可能是个father。哎,那你写子类呢,子类可以赋给父类啊,所以这块我们要写的是不是写到father就行。也就是说我们这个读取数据呢,是不是可以的。没问题啊好,那我们下边来看一下能不能往里写数据呢。比如说我现在拿着这个例子是吧,我现在想爱的。往里写。当然了,闹肯定行是吧,这个不多说了啊,除了闹之外呢。
37:01
如果可以写,那写什么?写father,写。来试一试。你有一个father是吧。不行。复制一份用一个丧呢?也不行。为什么?跟之前一样。啊,你要这么说的话呢,我下边这个呢,就跟之前不一样了。啊,不能这样解释了,看看能不能理解。啊,为啥不行呢,你看啊,我这个问号呢,咱们说呢叫exce,就是小于等于的意思哈。哎,如果大家把上面这个通配符,哎,把这个符号呢,我们用数学当中的一个式子来表示的话呢,我可以把它看成叫负无穷到正无穷。就是没有上接也没有下接是吧,所以呢,这个呢,就是完全你不知道它是一个具体什么类型,所以你往里写都不行。哎,而我们下边这个呢,CE呢。
38:05
对它呢,相当于是一个有上界的是吧,我们可以理解成是不是负无穷到这个A呀。如果看这个的话呢,就是这样的是吧,在我们这个题目当中,A呢,就是father嘛。它是这样的,你想想啊,如果从数轴上来看的话呢,这块有一个确定的上界了。呃,下接这块呢,是不确定的,咱们在Java当中允许这样的情况出现,比如说这是一个类,这是一个类,呃,右边的话呢,假设这个类就更大啊,相当于这如果是A,这是B的话呢,相当于B是A的子类啊。B是A的子类,然后我要是用了个B的对象,是不是允许往右。往右负是吧,这叫多肽了哈,或者我就拗了个A,我就负个A了,这也行,但是你不能拗一个右边的对象往左负。这是不允许的是吧,好,你看现在他是有没有下季哈。没有下界,就是他这个问号呢,飘忽不定。那假设我这符号在这儿。那你可以呢,你有这个对象给付给他。但是你要一旦你有这个对象,我这个,我这个还有可能在这儿呢。
39:02
就是只要你说我想用个东西,我总可以找到比你这个类型是不是还靠左的。所以你就永远呢,就有可能会出现右边的往左边浮了。第二呢,就我这个是没有下界的哈,所以呢,你永远不能找到。最有可能小的,但是你说极限是极限,就是闹吧。闹的话呢,总可以付,那除了闹之外呢,你要是想你有个东西,我总可以找到比你这个更小的一个类型,所以呢,你就不允许去写入数据了。可以这样来理解哈,所以写入数据呢,这是一个错误的,或者叫不可以的。这个例外。啊,另外就是我们这个闹。行,这个我就说完了啊好,那这个说完之后呢,我们来看这个结构啊。这个加四杠一看这个。这个话呢,跟我们上边这个类似的这样一个场景。哎,这个整过来啊,然后呢,我们还以它为例啊,CTRLC,诶拿过来我叫LIST1。哎,你有一个。A release好这样了啊好,我这个也是先看这叫读取这个数据的问题啊,读取数据的话呢,还以它为例,我们这个例一点的,咱们里边呢,你有一个比如father了。
40:11
好,现在的话呢,我拿这个呃,LIST1呢,去复制给我们这个list。啊,这样一个场景。行,那有了这个操作之后呢,下边我们这个list的点,我去get一下角标零。哎,能不能读数据。可以读是吧,好,那读完以后呢,这个类型怎么写。对,Object,因为我们说呢,这叫大于等于是吧,它可能是比这个发的类型大的一个类型啊,但是你不管什么类型,那总归是object类型。所以你看我out回车自动生成的,你看也是object。这个能理解是吧。所以它不像我们上边这个呢,可以精确的指定呢,就是一个fast类型,因为它是小等于的啊,诶所以这个读取数据呢,首先是可以的,但是这个类型的话呢,你注意一下啊,是类型好,那这个呢,你看能不能写入数据。
41:03
你比如说啊,我现在拿这个绿点,咱们ADD呢,Now肯定行,然后接着我在绿点ADD,我去new一个object。是吧,这是一个,然后呢,再复制一下,用一个father。有一个啥。哎,看怎么解释啊。这个不行,能理解吧。这呢是不是就理解成这个飘忽补丁的是吧,咱们这个呢,是有下界的啊,这个是个A类型,它是这么着的啊。有下节的这样的一个有限示条件的,所以呢,你要从数轴角度来讲呢,相当于这个位置,这个是A,就我们这呢,就是father了啊哎,它是往上这块这边漂浮不定的,那你整个object这这都到底到头了,那我问号万一是呢,比比这个。或者就是A类型的,那你相当于new付给A付给father了,显然不行,所以这个错呢,是很好理解的啊。哎,那么这块呢,你看你能不能理解,哎,我们下边这个复制的事儿。
42:06
下节你看已经确定了是吧,就是father了,那你这块呢,我右边的这些类型是不是都可以给他付啊。这不都是多态的场景吗?那你有下界的话,我你有一个father是不是也行啊?呃,你在这个问号飘忽不定,但是呢,我一定提供的是你这个此类的对象呢,我都可以给你付,这不都是多肽吗?是吧,诶,所以下边这两个氢它是不可以的,所以这个写入数据的话呢,我们说可以将啊咱们这个a father及其啊子类的对象。哎,添加进来啊。行这个事儿的话呢,有点难啊。啊,大家你想一想就行了,就是其实在开发的时候呢,你怎么办呢,我觉得有个小技巧啊。啊,你比如说回到我们刚才提到这块这个场景啊,或者类似的一些其他的场景,诶,我现在是一个添加的行为,我要往里放要添加啊。
43:01
怎么看呢,有时候一看到这时候呢,还得脑袋都反应一下是吧。其实我觉得呢,有一个小技巧,技巧什么呢?就是你你看到这样类似结构,你就往里面附。或者让添加了,你就往里添加,他报错了,报错那就删了呗。那就不行是吧,没报错,没报错就接着往下写呗。非常简单,编译器都给你调研好了,你说为什么报错了,诶你要去想,那就是想咱们刚才讲的这个事儿了。哎,其实呢,你在用的时候呢,不用想那么细哈,小细小技巧就是说,诶开发中是吧,呃,遇到了啊这个带限制条件的。啊,这个通配符了。啊,那么在赋值时啊。哎,如果没报错。嗯,那就正常使用。啊,你就这样使用,那如果报错了。啊,那你就知道呢,不能这样写是吧。那就改一改呗。就完了是吧,就行啊,其实我要做的话,我也是这样做的,因为你每次呢,都这样去反应啊,这个不行那个不行,有的时候呢,你不一定呢,会一下子那么透彻,你也得想一想,想一想,就这个事儿。
44:11
好,那么这呢,说完之后呢,咱们整个呢,关于泛型这块呢,就讲完了,哎,重点的话呢,还是第一个点啊,在集合当中我们去使用泛型,在比较器当中使用泛型这块大家呢,把握住啊。好,那么关于通配符这一章呢,咱们就讲完了啊,这是一个新特性,相对来说呢,这个内容呢就会少一些,来我们做一个复习,打开我们这个零三,找到我们这个泛型。诶打开啊好,我们这一章呢,就说了这么几个事儿啊,第一个啊,可以理解成了叫泛型的一个理解吧,专门给大家写一下啊,第二项呢,就是泛型在我们现有的结构中的使用,那典型的话呢,就是泛型在。哎,集合。哎,和我们这个比较器中的一个使用了,这个是我们已经有的这样的结构了,然后呢,这个集合比较器中有泛型,所以我们能用,但是在实际开发当中还有其他一些结构啊,以后呢,遇到的话呢,跟它类似,那我们说除此之外呢,我们还是呢需要自定义。
45:04
哎,泛型类啊,其实类似的呢,就是泛型接口,咱没有讲泛型接口啊,区别呢,还是类和接口的区别啊,就不写了,然后呢,诶泛型方法啊,这是一个事儿,然后呢,再往下第四个点。啊,就我们提到叫爱泛型在继承上的一个体现啊,知道了什么时候能赋值,什么时候不能赋值,再一个呢,就是通配符的一个使用。诶,OK啊,就这几个事儿啊,第一个关于泛型的理解。哎,泛化呢,其实我们说呢,就是。就一个肩宽是吧,你说为什么肩宽呢。你用别的也行,只不过呢,你要用中国号的话,咱们数组不都已经用过了吗?大括号呢。大括号也行,有时候咱们可能对代码框呢,代码框里边用这个大括号了,或者咱们有时候这个输出语句的时候呢,也会有这种大括号的这种场景是吧,所以你这块挑来挑去小块呢,强制类型转换有用了。算过来算过去,好像就有它了是吧。那就用它了,所以这呢没啥是吧,好,关键的就是这块呢,要理解的就是这个意哈。
46:05
咱们这呢叫这个它就是一个叫泛型啊,或者叫泛型的一个参数啊,它呢,在具体指明它的时候呢,一定要注意,它是表示的一个类型,不像以前呢,我们说那个ii呢,不确定I呢是一个值。567可以去给它复制,而这个E呢,是得拿一个类型来复制。啊,使用类型来复制,然后这个类型的话呢,还有要求还必须得是使用。引用数据类型吧。啊,基本数类型还不行。啊,其实这呢就是它的一个本质啊,这个呢,其实把握住之后呢,其实也就没啥了。OK啊行,那具体这个泛型在集合比较集中的使用呢,这呢是咱们这章的一个重点。啊,就是哪怕呢,大家这个事儿呢,你说我不会是吧,这个大家做一个熟悉就行啊,这个呢,哪怕你不会,那以后我们遇到这个场景的时候呢,大家再看一看,随着大家呢,这个代码量的增加,认知能力的提升以后再去写这个呢,其实也比较简单,现阶段你要觉得有点难放一放。
47:01
但是这个呢,一定要会。啊,这个要会,这个要会的话呢,集合大家呢,重点呢,你需要呢,知道就是呃,集合这块呢两个啊。一个呢叫A,因为我们开发中呢,老用它这个你得会,然后再一个呢,就我们的哈希map。对对,这个呢,因为我们开发中用的也比较多,正好呢,他俩也挺有特点,这个呢是一个反应参数,这是俩。哎,正好大家体会一下这个不同的参数的这个写法啊,所以说那个赛的话呢,我们用的比较少了。啊,另外的话呢,在我们这个遍历的过程当中啊,要用到这个E。所以这个呢,它本身也在泛形,所以呢你也要会用。啊,这个呢是说的他撒这就集合这块了啊,这就完事了啊,然后呢,这个比较的话呢,自然然呢,就是这个compar是吧。这个呢,课后的练习题涉及到的写一写啊。平行检查去掉啊行,这呢就不多说了,对应的代码咱们课件里边代码中都有啊,写一些重点,下边这个自定义反应类反应接口。
48:05
啊,这个呢,其实你就把握一下这个最核心的点啊,其实就以类为例的话呢,就是这个位置你就加上一个泛型就完了。然后在这个诶大框里边呢,你可以呢,去定义这个属性啊方法呀,构造器啊,就使用上这个泛型就行。哎,我们课后呢,有些具体的说明,好翻译方法。啊,这块呢,通过刚才咱们又看源码啊,发现大家对这块的理解不是特别好。啊,你判断这个方法是个泛型方法,就是你看一下在。修饰符的后面,或者说呢,我们这个返回值类型的前面啊。返回值类型是吧,这个呢是方法名。啊,这个呢,叫行参列表。OK啊行,这大括号就是在我们这个返回值类型的这个前面这块,我们有个间块里边呢,有一个类型啊,这呢就叫反型方法。你别看这个哈,返回类型呢,可能人家就是一个list,然后呢这样写的,这还是叫返回类型。
49:03
啊,这不算啊,还看前面这人呢,这个方法你看它是不是一个静态的,那就看你需要了。加上静态,需要加就加,不需要就不加。啊,是这样的情况啊,然后呢,这块这个E呢,说明是个泛应方法,通常咱们在反回值类型这块,或者是形态列表这块呢,我们会出现这个E的。啊,那出现的话呢,比如我们这儿呢,在这儿出现呢,我这个in呢是类型,你一放的是个,那我这块就认为啊,你这个in呢,就是个类型啊就确定了,所以呢,是在调方法的时候呢确定的。啊,然后咱们说呢,这个具体的细节是吧。啊,细节来见咱们对应的这个,呃,Idea中的这个笔记是吧。笔记。这个呢笔记呢,大家看一看就行啊,不用去深究了,这个呢不是重点啊,相对于呢,咱们这个课后的几道练习题,建议呢写一写,只要这几个练习题的话呢,你要是熟悉了,那就没啥问题。
50:01
OK啊。好,下边呢,就是继承啊,泛型在继承上的一个体现,就是大家平时在用的时候呢,呃,遇到这样的情况了,这个你得清楚啊,就我们说的。这两个事儿啊,这个就不用多说了,其实呢,也不也不难啊。啊,这俩我这俩到底哪个能付,哪个不能付清楚。好,下边这个呢,叫通配符的一个使用,所以呢,既然呢,你这两个是并列的结构,那我们能不能给你一个共同的结构方便呢,我们在调方法的时候呢,去使用呗,所以这块呢,就引入这个叫通配符了,这块呢就有两个啊,一个呢就是纯粹的一个通配符,没有上界也没有下界啊,它的一个使用。啊,再一个呢,就是我们说的两个有限制条件的啊,它呢去extend哎,咱们具体的一个类型的啊,这是一种。啊,还有呢,就是他呢去super。啊,这呢是一种。OK啊,无外乎呢,也就这样的两种情况啊,嗯,这个里边的话呢,这种大家多注意一下啊,咱们以这个。
51:01
啊,集合为例。这个咱们提到了,说它呢是可以读取数据是吧。然后呢,是不能。写入数据。这个当然这个例外的话呢,每次都存在啊,这都是这个闹的问题了。啊,这个呢,大家把握一下啊好,那么关于这个场景的话呢,如果也是以集合为例的话,我们说呢,是也可以读数据是吧,他能写不,还记得不。小于等于A不能是吧,它没有下泻嘛。你填一个总可以找到比你这个还小的一个类型是吧,诶所以这个呢,也不能写啊,然后对于他呢。可以出去,出去可以。哎,可以写入。对A类型。啊,或者是A类型的子类的这个数据是吧。诶这个是可以的,行,这块大家清楚就行啊,后边用到了,诶能不能赋值啊,能不能这个读写啊,针对集合来讲,这个呢,清楚一下这个事儿就行啊,这个要重点的话呢,大家主要也就看一下它啊这呢算是一个重点,下边这两个的话呢,大家比这个它的要求呢,低一点就行了。
52:09
行,这个相对来说整个内容也比较少啊,这个企业面试题这块呢,关于他问的也比较少。啊,说那个渣中的泛型是什么?有什么好处和优点?这个呢,大家就可以集合为例去说是吧。啊,发型是什么呢?就是一个。不确定的类型是吧。说泛型。啊,是这个程序中。啊,出现的不确定的这个类型。注意它不是不确定的变量啊,不是变量值,它是个类型啊,这就是其实本质上来讲,就是它对于我们这个集合来讲的话呢,本质是啥呢。然后在这个课件里边这块也有写这个事儿哈。嗯,这个在这儿了,对于咱们集合来讲啊,把一个集合中的内容限制为一个特定的数据类型,就是泛型背后的核心思想。
53:01
啊,因为我们集合是个容器嘛,这个容器呢,操作的是什么类型啊,咱们这块呢,就用泛型来表示,这个你可以泛型来举例是吧。呃,不是以这个集合来举例啊。哎,就是这样一个概念。啊,所以就是它啊,那有什么好处和优点呢。好处和优点,其实呢,一方面啊,就是我们可以限制具体类型。就以集合为例是吧,呃,另外一方面的话呢,就是我们一旦限制好以后的话呢,我们在操作的时候呢。其实也更方便啊,就是确定的类型呗。你说以前没有泛型,没有泛型就不能活了吗?那肯定不至于啊,那这里5.0之前写代码不也写的好好的嘛,是吧,只不过呢,就像我们这个写do一样啊,你要是5.0之间没有泛行啊。那我们写这个通用的自然改查操作,那没办法,这个你就把它删掉,凡是这块出现T的呢。是不是都认为是object?对啊,只不过呢,我们加了翻译以后呢,就更明确了,这个类型是啥。从这个角度来讲的话呢,人家数组一开始就是这样的。
54:05
所以你看我们在讲这个集合这个第12章的时候啊,咱们一上来说这个数组讲它弊端的时候呢,其实我说过它的一个优点。在这儿。说数组呢,一旦触发完成,其元素类型就是确定的了,不是此类型的元素就不能添加进来。而集合不行,集合呢,你什么都能加啊,那我们为了呢学习数组,我们才引入的泛型。所以自然而然这个优点是啥也一目了然啊好,下边这个这个其实这个了解一下就行啊,说JDK不同版本的泛型有什么区别啊。就是一些所谓的新特性的一个事儿哈。这个咱们知道呢,JDK7.0的时候呢,有一个新特性是吧。新特性啊,这个新特性呢,就是咱们说的,比如说一个为例,这呢写了一个string这个list。哎,你了一个a list。然后这个位置呢,就可以不写了是吧。啊,这呢是一个新特性,对这个呢,相当于一个呢叫类型推断。
55:02
OK啊。嗯,后边的话呢,其实还有这个新德性啊。后续版本的一个新特性,哎,我记得应该是九还是十来着,可能是九里边的啊,哎,什么新特性呢,是是有这么个新特性啊,这个大家也是了解一下就行。呃,咱们讲这个比较细的时候啊,我写到这个里边了吧。比较器啊,看这啊。这个比较器呢,针对这个以它为例吧。其实应用的话呢,也不管是比较细了,凡是呢,呃,你现在new的这一个结构它呢,如果带泛形啊,都有这样一个场景,前边后边这个位置可不可以删的问题啊。这就是个小事了哈,你看现在我是不是删了。商量没事儿是吧。诶,这个注意这个不算是这个七的新特性了,因为这块你要用一个实现类的对象了哈,这个呢,现在没事,是因为我们用的是版本比较高。我现在是这个猫的话回过来。这个大家就理解一下就行啊,没啥大不了的。
56:00
哎,把这个语法规则呢,我们调成是八的这个版本,然后我们再OK一下。我改的对吗?我改的哪个?改的这个是吧。给它改回去啊,改咱们这个啊。八的。改了好,改完以后的话,你看这块就报错了啊。这个报错的话呢,就要求你必须得把这个employee得写上才行,要不呢,他还是推断不出来。啊,这也算是个小的新特性,这个我记得应该是九的时候呢,你给他改过去就没事了啊,所以这块大家了解一下就行啊,就相当于是我们这里边儿呢,要提供一个这种。啊,实现类的这种对象名的,然后呢,在后续的这个版本中新特性里边呢,你可以把这个位置给它去了。这呢也是一个类型的推断啊。嗯,像这个呢,就了解就行啊。没了,说说你对泛型的理解啊,这个答案也就绿了,就跟上面类似,说它的好处啊,是泛型是什么呀,来说一说就行啊。
57:04
好,那么关于我们这个复习呢,就到这儿。
我来说两句