00:00
那接下来呢,我们看第三个新特性叫做in essential so的模式匹配,那这个呢,大家一听到呢,如果你关注过之前相关版本的新特性的话呢,提到这个你应该并不陌生,因为呢,这是我们second previe,就是第二次的一个预览,那么第一次的话呢,是在JAVA14当中我们引入了,那现在呢,在JAVA15当中实际上没有做任何的修改啊,所以说大家呢,如果你之前看过我讲的JAVA14的新特性的话呢,那么这呢,只能说相当于是一个复习了。那我们做模式匹配的这个目的是什么呢?主要呢,希望在成语当中,那在相关的这个通用逻辑的这个位置呢,可以更简化的去表达相关的一些实现。啊是这样子的,那我们这里的这个in森这个模式匹配是什么样的呢?咱们这块呢,就直接来看一下这个代码。那这个代码呢,实际上在我讲JAVA10子当中呢,其实也用过这个代码,那我们这呢,也算是一个复习啊好,那首先呢,我们说在这个使用新特性之前,比如说呢,我们这用了一个string,我把它呢,呃向上转型,或者我们成为一个多态的形式也行,赋给一个object类型的变量了,然后呢,Obj我们判断一下它是不是string的实力,那如果是的话呢,做一个强转。
01:09
啊,这呢,都是咱们之前呢,非常习惯的这样去写,对吧,然后你转化完string以后,然后拿着这变量呢,去做相关方法的一个调用,这里边我们指出呢,就必须要显示的声明这个强制类型的转换,那如果有了我们这个新特性之后呢,那大家看到我们此时呢,OGS这个string后边呢,我们就直接带上啊,你强壮以后啊叫的这个变量名。如果呢,你是一个词缀类型,那我们直接呢就付给你这个新的变量名了,我们进而呢,通过it tr呢,进行一个呃,相关词缀方法的调用,所以呢,主要呢就是省到这儿了,我们省去了强制类行转化的一个过程,所以呢,使得我们整个这个代码呢,有一个更简洁的一个表达,对吧?那其实就这两个新特性啊,那关于这两个方法的执行的结果呢,那其实都还是一样的,这个呢,因为你就是个string,所以这就是true,那上面这个也当然如此。啊,这里都没有问题啊,包括呢,你像我们提到关于这个obj啊,举个例子啊,比如我们又给它重新复制为一个no,那上面复制为一个no,下边呢也复制为一个no,那这时候我们就要想说,你复制为no以后呢,这个还算不算是死string类型的一个实例呢?那我们执行一下大家看看。
02:18
好,你看这时候呢,这个no的话呢,它就没有进入这个if对吧?哎,进入的是这个else,那我们下边呢。应该也是如此对吧,所以说这里边呢,就可以看作是我们in森so模式匹配,对之前的这种写法的一个完全的一个替换啊,这个呢,相当于也复习一下我们之前的一个语法规则,就是当你这个呃引用类型的变量是not的时候呢,用in进行判断的时候呢,它是进不去的啊,这一点呢,大家需要注意一下这个事情啊,然后呢,我这儿呢,又列举了两个例子,大家来这个再看一下。我们呢,在定一个类的时候呢,呃,比如判断这个数据呢,它们相互之间是不是相等的,我们呢,就是需要重写E方法,那应用方法这个参数呢,就是OB类型,那这里边呢,就意味着我们需要呢做一个类型转换,对吧?那以前我们要写的话呢,叫o of monitor,然后这个位置的话呢,我们就得这样写了,然后在这里边我们需要呢判断说如果呢,你是它的一个实例,那我们就拿monitor,比如这呢,就叫other来进行一个强转了,对吧?哎,O放在这。
03:19
哎,这样呢,我们做一个这个强转。哎,Change o,哎,这个我们在这直接这样写吧,看是不是得这样了,这呢就是我们讲这个JAVA14应该叫14这个新特性之前得这样做对吧,那现在我们有了这个JAVA15的这个JAVA14或者叫15这个新特性之后呢,直接呢,我们在这个位置就可以把你这个强占以后的这个名呢,就写到这儿了。哎,然后下边就可以直接用对吧?哎,包括呢,我们对于这个写法,你看现在写的也可以看作是稍微有点复杂,咱们还可以再给他做一个简化啊,哎,比如说我这里呢,把这个方法的声明CTRLC一下啊,整个这块我们先注释。
04:02
啊,大家看啊,这时候呢,我们说还可以这样写,直接呢,我就return一下,怎么着呢,说你这个O呢叫呃O是吧,Instance of是不是一个monitor呢,我这呢还叫一个other,然后接下来我就直接语上,那如果呢,你是一个。哎,这个monitor类型的相当于这个呢,就满足满足的话呢,我们就接着往后走,那这个时候我们后边就直接可以用了,比如说我们针对这个叫model,当前对象的model属性,我们去调equals啊,对应你这个other对象的这个model这个属性,然后再与上一个啊,我们说当前对象的叫price啊,是否等等于我们这个other对象的。哎,Price这样一个属性,哎,这样直接也是OK的。啊,相当于比我们上面这个呢,是不是还简洁一些,对吧,相当于我们这里边生命完以后呢,在紧接着后面呢,就可以接着去使用我们这个other了。啊,这两个都算是心得性,这个呢就更形式上更简洁一些,然后再举一个例子啊,再举个例子,大家呢,你看我这想说明的问题啊,我们这儿呢,是一个物比接,然后呢,当你是一个C类型的话呢,我这写的叫HR,哎,然后这里边呢,HR这个HR你注意,你看我们按住这个CTRL啊,点1R是不是就是我们生面这HR。
05:12
然后这里边你看我故意的啊,在alt里边呢,还是一个HTR,这时候呢,需要注意我们这个HTR,你看跟这个颜色不一样,我们按住CTRL键一点,是不是就点到这儿了,那YID呢,就是我们这个时候的else里的HR呢,是我们的一个哎field啊,一个成变料,而不是我们这里边的一个局物变料。也就是说我们这时候呢,这个instance of string类型后边这个变量只是在我们这个if当中才有效,出了if呢就失效了,那这个点跟我们以前的这个语法规则呢,也都是一致的,那需要大家清楚,那这呢,我们看到这还是一个second pre,那说呢还不是正式的,但是呢,基本上可以确定下来,这个语法呢,在后续的版本中一定会作为一个正式版出现的,那我基本上可以打这样的保票啊,所以说大家呢,如果有兴趣呢,你可以当你安装的是JAVA14啊及之后的这个版本的话呢,In s呢就可以这样用啊,是没有问题的。
06:05
好,这呢是我们说的这个in森,我们模式匹配。
我来说两句