00:00
呃,这一章呢,最后关于我们张二八新特性呢,最后提一个类叫做optional类,Optional类刚才呢,我们在这个操作的过程当中啊,其实涉及到过这个optional这个类,只是说呢,我们这块呢,没有去深究它啊,那它到底是做什么用的,我们来看一下啊。说呢,到目前为止啊,这有个成语叫臭名昭著啊,这个Java里边呢,我们写代码,因为呢,你是基于面向对象的,都是通过对象点点点,那时候对象要是闹,这就控制帧了。哎,所以说呢,臭名昭著的控制帧是导致障碍应用程序失败的最常见的原因。啊,去面试的时候呢,说诶常见的异常都有哪些啊,那很显然控制人异常是你逃不过去的一个啊,如果呢,说当然人家一般也不会问哈,说你举一个控制链的例子,这其实有点太简单了,有点侮辱你了是吧?但是如果你这时你脑子一蒙说一啊,我好像没出过,或者说呢,我举不出来,这个是非常糟糕的一种表现啊哎,不可能没有出过控制帧,应该是信手拈来啊,因为出现的情况太多了,哎大家呢,一开始见到控制帧的时候呢,应该是在数阻,哎,应该刚见的时候呢,还非常紧张忐忑是吧,就跟初恋的那种感觉一样啊哎,然后后来见多以后呢,就是一点感觉都没有了是吧?啊,这控制针应该见到以后呢,很容易排啊说到呃,但是呢,虽然容易排,但是你出现控制人呢?毕竟程序就结束了。
01:24
啊,这个也挺恶心的啊,所以这个呢,给了一个成语啊,那以前呢,为了解决控制人异常啊,这个谷歌公司啊,在这个项目当中引入了一个类啊,这个类的话呢,就用来防止我们这个控制人的情况出现,哎说呢诶不错不错呢,张二八呢就引进来了啊就是这样一个意思啊,那我们在JAVA8里边呢,就多了一个类啊,也叫做optional类,那用它呢来尽可能的避免我们的控制帧问题。下面提到说optional这类的话呢,也是一个容器啊,这样说呢也没毛病啊,容器呢,只不过它装的数据呢比较有限。
02:01
啊,就装你核心要的那个数据啊,你要从这个角度来讲,咱们的TE呢,似乎也是一个容器啊,就装咱们那个int是吧?啊就装它的,这也算是个容器啊,这个optional呢,哎,它可以装咱们任意一个类型的一个对象了。嗯,成说代表呢,就是这边写的啊,哎,它呢可以保存类型T的值,哎代表呢,这个值呢是存在的,或者说呢,仅仅保存是一个nor表示呢,这个值不存在啊,就比如说咱们现在呢,有一个比如boy的一个对象,说boy这个对象呢,我就放在这个optional里了,Boy本身是个no啊,相当于这里边呢,哎,我们想要的那个核心的值就不存在。说的有点抽象是吧,说一下这个源码啊,Ctrl shift t一下optional,哎,就是这样一个类啊,这个optional进来以后,哎,我们呢,先看它上边这个结构啊,它说它呢是个容器,其实指的就是这个事儿。就是对我们这个数据做了一个封装,比如说呢,我们这个T呢,刚才提到说这个叫boy啊,哎,你要是真正有这个boy的一个对象,我们就装在它里边,就意味着这个value呢,不是个no,那你要这个boy呢,是个no呢,那其实这就相当于它就是一个空了。
03:14
那就这意思啊,那凡是对boy的操作,我们都可以呢,封装为对optional的一个操作,就像原来我们讲包装类一样,凡是你对int的操作呢,都归结为对integer的一个操作啊,类似这样的一个意思啊。好,那回过来。嗯,那下边这话说呢,说现在呢,Optional可以更好的表达这个概念,就上边提到这个事情,然后呢,诶可以避免控制人这样的一个异常,哎,扎va到一个描述,这个我们就不看了啊,在接下来呢,提到optional里边的一些方法啊,其实我们关注的呢,也是它里边的这样的一些方法啊,这个方法里边我们简单的稍微提其中的这个几个啊,嗯,第一个像optional点有一个of方法。哎,我们把这个对象呢传进去啊,传进以后呢,就能够创建一个optional的一个实例,这时候呢,你创建的这个实例要求T呢,对应的这个对象一定是非空的。
04:08
啊,Empty就是个空的a novel就是可能是空的。啊,这个一说呢,还是有点抽象,哎,咱们这块呢,举个例子啊,再呢,去新建一个包。JAVA4。哎,这个包下呢,我们首先呢,先整两个类啊,咱们稍微形象点,比如说一个是哎boy。哎,这个boy啊,再来一个类girl。诶这样啊,那这个go这块的话呢,我们给大家声明了一个属性先啊private,诶死质类型的,诶name哎,Private,哎这个就就管来一个name吧,哎,然后C,呃,Shift s提供这个构造器。哎,代餐的空餐的也给一个。盖菜的方法。兔子。
05:02
行,这个类呢,我们就写好了啊,Ctrl shift f一下,然后接下来,诶,我们呢,在这个boy里边,首先private。哎,Private,我们就声明一个,哎,Go类型的一个go。作为它的一个属性,出现了out shift s。够大气。诶,然后诶,再接着提供这个盖塞方法。哎,Toth行,这呢,我们就写好这个结构了,然后呢,我们下边啊来测试一下关于这个optional的一个使用。首先呢,我们稍微关注一下,它这里边这个几个API啊,它的一个使用。行,那刚才呢,我们看这个PPT的时候呢,提到上面创建它这个对象的这个方式啊,那这个呢,我们CTRLC一下,简单的在这看一眼。
06:07
哎,粘过来啊呃,第一个呢,说我们通过optional,它的一个静态方法叫做of啊,我们直接呢叫option no啊第二啊第二个of方法这里边呢,我们可以去传一个对象,诶这个对象的话呢,你不要空,哎这个呢,它就不会报一个异常,下面呢,我们封装了option,不是说是一个容器嘛,诶封装的这个数据呢,一定得存在啊。哎,这呢,比如说我们去new一个勾,哎,Al enter,哎这是一个勾,哎这个呢,它一定是飞空的,哎我们放进去,那这个在al enter一下,哎生成一个就是optional这样的啊行,那此时呢,我们可以先执行一下。哎,你看这时候就没有问题啊,相当于呢,创建成功了这个对象,但是如果说你这个go啊,它是个no啊,这个时候呢,我们执行它就会出错。
07:02
哎,这个报错了,哎他还报了个控制针,嗯,就是这块呢,因为我们这个O方法啊,这个点开的时候呢,哎,他在这边写了说你这个Y6啊,这个Y6呢,是我们就拿它付给咱们这个optional那个属性Y6的,哎说要求它呢,必须得是飞空的。那这个要求比较高一些啊,那这个呢,大家了解一下这个就行,然后这个MT的话呢,就是它创建的是一个空的optional的一个实例,这个我就不演示了,然后我们看这个。啊,看这个,那这个呢,咱们不妨呢,就再新建一个啊CTRLC。哎,这能写成个二啊,这呢是一个go,哎,假设呢,一开始它还不是个now,我们现在调的这个方法呢,叫a novel。哎,调到这个方法,这个方法我们传进去一个勾,那如果说你,哎行三呢,我们这个勾它就是飞空的,哎,那我们看一下你这个结果。
08:00
哎,非空的啊,确实呢,我们这里边就存着这个go了,行,那如果说我们这个go呢,是一个no压呢,就我们放的这个啊,想让你这个optional去包装我们这个对象的这个能不能是no呢?上面这个不行。这个呢是可以的啊,那压这个就是你这里边调的是一个MT,哎,我呢就发现你这个呢,数据实际上是一个空的。啊是这个情况,他呢就不会报异常啊,在这呢,我们说明一下啊,说这个恶物方法,哎,必须要保证,哎保证我们这里边呢,是一个T类型的一个小T啊。哎,保证我们这个小T呢是飞空的,哎,而这个方法呢,我们说这个小T呢是可以为空的。啊,就是我们说的这个事儿行,那这个方法呢,哎,我们刚才测完以后,对我们接下来这个操作呢,就有一定的这个借鉴意义了,那后续呢,它这块还有来获取这个值啊等等这个操作,这个咱们这个一会再说啊,哎,咱们下边呢,就举一个具体的一个情境了,看看这个option中呢,我们开发中呢,怎么去体会它呢,可以避免控制人异常这个事儿。
我来说两句