00:00
下面呢,我们就具体来讲解这些新特性,那这里边讲解呢,我们要说明一点,在官方发布当中呢,它的这个顺序呢,是这样子的,我这里讲的话呢,并不是按照这个数值从小到大依次呢去讲解,我们呢是按照Java式词当中新得性的一个重要性,或者叫实用性来给大家呢做一个先后顺序的一个排列,那首先的话呢,我们来讲解的就是比较重要的这些新德性,OK,那我们来看第一个叫GP的305叫essential的模式匹配,这呢是一个预览功能,也是我们所谓的叫preview,还没有正式的确定下来,这也是在我们14当中首次出现的关于essential的这个模式匹配。啊,这个呢,说到说这个特性很有意思,他打开了更为通用的模式匹配的大门,对吧,那模式匹配一说到这个概念的话呢,大家可能会想到叫正则表达式。那么正能表达式呢,我们可以去验证一个字符串是不是满足一个电话号码的格式,或者一个邮箱的格式,或者我们指定要求的一个密码的一个这个格式,对吧?诶相当于叫模式的一个匹配了,那么在我们这里边儿呢,是在Java代码的一个层面,或者叫Java这个语法层面,我们实现了一个叫模式匹配,它呢将以更为简便的一个语法,基于一定的条件呢,来抽取对象的一个组件,就是整体的语法格式呢,就会更加简洁,对吧。
01:14
那在我们这里边呢,引入的叫CE,它呢减少了Java程序当中显示的进行强制转换的一个数量。啊,就不需要我们再去显示的去写这个强制类型转换了,诶大家一会一看就知道了,那省省去这个编写的话呢,肯定是我们这个代码就更加简洁嘛,对吧,很显然的一个特点啊,这呢是我举的两个例子,咱就不在这看了,直接呢咱们来看这个代码啊,这个代码这块的话呢,这个为了我们让大家呢更这个简洁直接的呢,来理解我们的新特性,体现了一些大家之前写代码的一些习惯的代码呢,我就已经放在这儿了啊,咱们首先呢来说一下。这呢是我们用了一个string,把它呢付给了我们object类型的一个变量,这呢就是一个典型的多态了,对吧?那么我们在很多的场景下呢,发现方法的行参,就比如我们下边这个行参呢,都是一个负类类型,或者是一个接口类型,那我们真正调类方法传入的这个实参啊,都是一个子类的对象,或者说呢,叫实现类的对象,那么如果我们在内部呢,需要进行这个真实的这个变量类型的一个呃,特有方法或者属性在调用的时候呢,一定是要进行强转的,这个不用多说,对吧?那么在强转的时候,以前我们都是这样写的,说obg啊,是否in instance of string,如果是的话呢,我们做强转,然后呢,调用string特有的这个方法。
02:24
说是不是包含Java对吧?然后呢,如果你要不是此轮类型,我们这呢有一个else的操作,这个呢,想必所有同学应该都非常清楚,不用多说对吧?OK,那主要呢,我们来演示一下这个新特性,它是怎么样的一个情况啊,这呢我是举例,一好看一下这呢,我就还用一下咱们之前的这个obj这个变量了,我们呢直接在这块写if,说obj instance of这呢是不是就写钝呢?注意后边呢,直接我就把这个变量呢就写到这里了,说呢,如果你要是一个齿轮类型,那么呢,直接呢就做强转,强转对应的这变量呢,就叫做ST。二,那下边这个操作跟原来呢都是一样子的。
03:04
粘错了,粘到这儿是吧。所以主要的区别呢,就在我们这个位置,相当于是新特性中。新特性。省去了这个强制类型转换的过程。或者换句话说呢,我们将进行因次做判断的过程,和我们强转的过程呢,给它合二为一了,这呢就我们称为叫哎模式匹配。啊,这个模式匹配OK,这呢就是我们要强调这个点,那么有一个点呢,跟原来还是一样子的啊,比如说我们这个obj,这呢是我们用一个string来复制的,如果把这个OB呢,再复制为一个no。大家应该能理解是吧,在复制为now的情况下呢,我们string这块呢,还能进去吗?不知道大家平时呢,有没有遇到过这个问题,或者呢,有没有这个真正的去测试过,此时呢,你会发现呢,是不是结果还是叫非string类型,就是跟原来的情况呢,是完全一样的,这个大家应该都懂,就是说如果我们这个,因为咱们说这个多态的形式呢,肯定针对主要都是这个类类型了,对吧?啊类类型的就是我们这块呢,引用类型的变量,它的默认值呢,都有闹,但是这个not值再去判断是不是指定的某个类型的时候呢,注意这个是进不去的。
04:15
啊是进不去的,也就这个not纸呢,咱们在匹配这个的时候呢,都是false,这个呢也一样。啊,这呢,其实原来也都是这样的啊,这呢,我们只是特特别的给大家强调一下啊,说呢在。使用这个no啊,匹配IN50。返回。都是false是吧,这个跟咱们原来是一样子的啊,就是不知道大家呢,原来有没有关注过这个特点,这呢强调一下啊OK,那下边呢,我们来看一下这个,嗯,另外的几个例子,方便呢大家更好的去理解我们这个新特性,这呢我来一个叫举例二。嗯,我创建一个类,这个类呢,不妨我就叫做instance。这样一个类吧。
05:03
在这里边呢,我定义一个方法,这个方法呢,比如我就要一个test方法,这个方法的这个参数呢,我写成是一个object类型。Obj OK可以了,然后在这内部的话呢,我们这样直接就用了啊说如果obj instance of。是string类型,这我呢直接把这个变量呢,我就写到这了,如果你是一个string类型在这里边的话呢,我们直接就打印一下,比如说IT2点,我称为呢叫two upper case,把它转换成大写,OK对吧,那这个else的话呢,哎,我这里边想写个什么呢?我想把这个atr呢叫to lower case。是吧,我想诶这个这个他给我显示的有问题啊,把它CTRC。它会自动的,这个idea呢,比较智能一点啊,但我这样写的话就报错了,这个大家呢,想必应该都能理解对吧?就是我这呢想强调的问题就是我们这个IT2呢,它还是在我们这个if语句里边所定义的,所以它的作用域呢,就是在它的这一对大括号之内,那如果说你在另外一个else结构中使用这个itr呢,这里边it tr呢,其实必须呢,还是我们得额外提前定义的这样的一个变量,对吧?比如说我在这个位置,我定一个死锥形的叫it tr,这呢我称为叫ABC。
06:26
能理解吧,当然这块呢,写ABC的写HR的时候呢,他说跟这个呢,是不是有点这个冲突啊,这个大家应该都懂,就是我们在这个一个方法内呢,是不能定义两个同名的这个变量的,但是我要把它呢放在这儿呢,不让我往上提了这个idea,我直接把它粘出来放在这儿,这是不是就OK了。能理解对吧,就是说我们在这个方法当中。方法当中的这个位置,我们这个HR呢,属于一个局部变量,这个局部变量叫to up case转化成大写,那我们这个位置的R呢,使用的是这个属性。哎,主要呢,想跟大家强调点是这个啊,就是我们此时的这个IR,它的这个作用欲。
07:06
仅限于这个if结构内,那那除了你这个if结构呢,它就看不见了,能理解是吧?好这呢是我们说的这个第二个情况,其实这块呢,也不算这个新的知识啊,都是我们说在这个原有的语法的基础之上呢,我们只是体会一下这个新特性,OK,那下边呢,我再给大家举一个这个第三个例子。举例三呢是这样子的,那我们呢,在创建一个类的时候,像一个javain当中,我们通常会提供这个叫equal方法,这呢我们提到了有两个属性叫string型的model和double型的price。那这呢,Equals放了一个object类型,这个呢都很清楚对吧,那equals的话呢,形态就是object类型,那我们判断这个O呢,是不是这个叫monitor。这呢,我已经使用了这个新特性了,然后下边呢直接去匹配,然后呢,这个跟other,这个model other这个price呢,判断一下是不是都相等,如果都相等的话,那我们就return true,那这个方法的话,我们可以把它呢进行一个重整,重新整合声明的时候呢,还是它。
08:06
拿过来这个呢,我就注释一下了。那这个结构的话还可以怎么写更简洁呢,直接呢,我就来这书写了啊说return一下这个一个呢是咱们当前的,嗯,不对,先判断一下对吧,先呢,叫oce of monitor。Other先把这个操作呢,我们拿过来,这是一个必必备的对吧,那如果你是一个monitor的话呢,我们就做强转了,下边呢,我就直接写这个语符号了。诶,我直接呢,就把这个呢拿过来,哎,其实呢,把这个拿过来,CTRLCCTRLV直接粘过来就可以了,这呢就是我们使用这个新特性以后呢,大家还可以继续啊体会的这样的一个新的点,就是我们把原来这个代码呢,这么多行可以合并成一行,如果呢,你又是一个monitor类型的,我们在后续的这个过程当中,都可以在使用我们这个other这样的一个变量,也算是呢,这个作用域呢,是可以延伸到我们后边这个结构当中的。这呢是一个比较简洁的写法,在原有的这个基础上做了一个优化,OK,这呢就是我们要给大家强调的叫本质核心上来讲,就是用于替换咱们原有的这两行结构合二为一。
09:10
那这个模式匹配,虽然模式匹配的这个特性啊,虽然是一个预览功能,但是可以预见的是在JAVA1056乃至于说17这个LTS这版本当中,In色zone呢会保留下来,只不过呢,有可能它的功能呢还会做一些调整和扩展。行,那么后期的话呢,我们确定下来以后呢,大家可以呢,就放心大胆的去使用啊,现在呢,可以提前了解一下。
我来说两句