00:00
那下边呢,我们来说第四个特征,第四个特征呢,叫做多版本兼容炸包啊,官方的feature,官方特性呢,是在GP238当中说明这样的一个点叫multi release jar files,诶多重的稳定版的一个JA文件啊,大家呢可以按住CTRL键,然后呢点进去啊,打开官方提供的这样的一个说明啊,就在这里啊好在这儿呢,我们就直接来看下边这样的一个说明。说当一个新版本的Java出Java出现的时候,或者叫JDK出现的时候啊,你的库用户呢,要花费数年的时间才会切换到这个新的版本中。呃,原因是什么呢?呃,因为呢,这个那用户的话呢,没有特别明确的这个这个动力是吧,然后他要切换到这个新的版本中,因为呢,他的很多API呢,都是基于旧的JDK这个产生的,那新的这个JDK当中又绝对不可能把旧的API呢给它干掉或者叫覆盖掉啊,那这呢是非持怖的一件事情啊,那就意味着我们的这个库呢,就需要呢去向后兼容啊,你想要支持的最老的账号版本啊,有可能是六七啊或者是五。
01:10
啊,这样的情况啊,这呢其实也是导致我们的这个GDK呢越来越臃肿的一个主要原因,因为呢,我们每创建新的API,旧的呢还同时需要保留。啊,是这样一个情况啊,实际上呢,就意味着在未来的很长一段时间之内呢,啊,你都不能在库中运营九动新的特性啊,因为用户呢,没有明确的动力啊去更换这个GDK啊那我们这里呢,提到了这个多版本兼容的炸包呢,就来解决这个问题啊,让用户有这样的动力去更换,诶更换以后呢,也不会影响到他之前的这样的一些项目。啊,那这个呢,举一个例子来说明啊,举个例子,比如说呢,大家现在有一个手机。啊,这个手机呢,假设呢,是你两年前买的,诶大家知道两年前这个手机它的充电器口呢,是一个扁口啊是个扁口,然后现在呢,呃,都开始主推使用这个叫Type C了啊,就是你没有正反上下这个区别了,那盲叉就可以啊那那这个手机呢,就好比是大家原来呢写的这个项目A。
02:09
啊,这呢,诶可以是理解为你后边这个新的一个项目B啊,先不考虑项目B,比如这个项目A,这个项目A的话呢,我们好比是一个手机了,然后呢,它有这个充电器口,那咱们呢,需要提供一个这个充电线,这个充电线的话呢,就是这个扁口的充电线,那这个充电线呢,就类似于咱们所说的这个JDK版本啊,那原来的话呢,你是这个项目用的这个版本的JDK,那现在这个JDK呢,做更新了啊,他现在换成这个叫Type C的这个口了。那对于手机这个用户来讲,他肯定是没有动力呢,换成这个新口的,因为很显然这个新口的话呢,他也诶插不上去啊,也充不了电,所以他肯定会用旧的啊,但是对于我们这个Oracle公司来讲,他肯定建议用户去换,但换这根线呢,显然对用户来讲呢,是不靠谱的。啊,那我们这里提到了叫多版本兼容炸包,就好比是一个什么呢,它的这个时候的线呢,不是Type C了,它呢,这个叫多功能的一个线,哎,我有好多的接口啊,那其中呢,呃,有的这个头呢,是你这个原来的扁口的,然后呢,还有是现在比较新的这个typec的口啊,甚至呢,还给你多多整几个,比如苹果专门的这个口。
03:17
哎,我这呢是一个多功能的一个充电线,那这个线有了以后,我们建议用户说,诶你更换一下吧,因为我这个是个多功能的线啊,你现在这个老的项目能够用以后呢,你买了这个新的手机以后呢,这个Type C啊,我这个也可以用,说你用我这个线吧。那对于这个用户来讲,或者对于我们这个开发者来讲啊,他是愿意做一个替换的。啊,这呢,这个多功能的这个线,就类似于咱们这里提到的叫多版本兼容炸包。嗯,那放到咱们这个代码层面怎么去体会这个事儿,大家看一下,我后边呢,举了两个例子,那实际上呢,这个例子的话呢,也是来源于咱们这个官方这个文档啊,现在其实最权威的话呢,还是看了个文档啊,这是我把它粘出来的一个例子啊,好,那这个例子是这样子的,我们这里呢,提供了一个root的一个炸包。
04:07
啊,炸包呢,不用多说了,第三方的提供的一些这个类库了啊,里边呢,存放的都是自解码文件,这个炸包里边我们有ABCD4个类啊,然后呢,我又专门的提供了一个针对于JDK9版本的,其中有AB这两个类。啊,那现在呢,我们在我们的工程当中去使用这个炸包,那会是什么情况呢?好,如果你现在用的JDK版本是八,或者是八之前的这个版本。那如果我们在这个功能中去使用A类,那用的呢,就是你这个root包下的这样的A类啊,或者是B类C类D类啊,但如果呢,我们是在JDK9的环境当中去创建的这个工程,那此时呢,你再用A类,就会发现我们用九中这个A类覆盖了原有的这个A类了。啊,就相当于我们在九的版本中用的呢,自动的就是这个类,下边我这个说明呢,就是说的这个事情啊,那我再举一个例子,把它再拓展一下,那如果我们后续呢,还有这个JDK10啊这个版本的话,那这块呢又比较丰富了,那如果呢,你在小于等于8JDK的版本当中去使用A类,那用的就是它在九的版本中使用呢,就是用的这个A类,那如果呢,你是那用的JDK,比如后续是十了,那用的呢,就是这个A类,相当于十战中这个A类呢,又对九中的这个A类呢,进行了一个覆盖。
05:30
啊是这个意思,这呢是我呃列举出来这个,呃,这个粘贴出来的这个官方这样的一个说明文档啊,说通过这样的一个规定啊,然后呢,It is possible for where,这个versions of a class designed for a later our platform release。啊,什么意思呢,就是说通过这样的一个规定呢,这是可能的,我们的一个最近的一个Java平台的Java稳定版的一个平台,他就会去重写啊,他的一个class啊就会。
06:02
覆盖不能叫重启了overweight是吧,就会覆盖呢,我们之前这个earlier这个呃,Java平台或者这个JDK当中,它同名的这个类。啊,说白了就是一个完全的覆盖的关系,这呢就是我们非常权威的一个解释。啊,通过刚才的举例啊,大家呢,应该对我们这个多版本兼容炸包比较清楚了啊,那口说无凭,那接下来呢,我们给大家写个代码去演示这样的一个情况。
我来说两句