00:00
那这呢是我们获取这个构造器结构,那接下来再来说下一个内容。那除了这个构造器,我们呢,还可以获取运行时类的负类。呃,运行十类的这个负类,行,咱们做一下这个事儿,那还是呢,以这种方式呢,做一个哎,实例化啊,现在呢,这不是咱们的重点啊,咱们呢,上午呢已经讲过获取大的class实例的几种方式了,哎,那个时候呢,提到是一个重点啊,下边我们的中心呢,都在后续的内容,呃,那么我们class点,嗯,现在呢,想获取它的一个负类哈,负类首先呢叫get负类,负类super class呗,非常简单啊,那super class负类,负类也是个类,那它呢也对应的是一个大的class的一个实例,诶s out一下。哎,那我们就直接呢,诶super class了,哎super class啊这呢,就获取运行十类的类。
01:06
搞定,这不就是看C吗?啊,这样就行啊,呃,这呢是获取运行实类的负类了啊,那么还可以怎么做呢?呃,我们看一下这个person啊,它的负类其实还比较特别。带泛型了,那咱们刚才呢,获取到的这个负类呢,只是考虑到这个类了,没有提到这个泛型的事儿,也没有帮我们输出这个事儿,那我们呢,其实可以,诶给他再做一下什么呢?我们要获取运行时类的带泛型的福类。哎,我在下边再写一个,呃,运行时类的叫带泛行的这个负类啊,这呢写成个三,哎,如果呢,只是想获取到这个副类叫get super class,获取它带泛型的类。第二,首先还是get啊,带泛型的,泛型的叫做generic。
02:02
是不是带泛型的负类嘛,哎,所以说你要是这个英文要是好的话,或者本身呢,这个母语就是英语的话哈,说如何去get generic super class,然后下边啊get gene super class是吧,就很无聊了,就哈,嗯,所以呢,比较直接,哎这个在这个位置,哎,然后al enter一下来生成这个变量啊注意你看它这是一个tap类型的。Tap呢,其实是一个接口啊,像咱们那个大的class呢,都实现这个接口了,CTRLC一下直接我们就放到这。执行。你看这时候就拿到了,此时呢是一个creature,同时呢,你看他把这个泛型呢,也帮我们写上了啊,这呢叫带泛型的负类,那接着这个内容再往下说,我可以呢,获取叫带泛型的副类,那么再换一个需求,我可以获取运行实类的带泛型的副类的泛型,就我现在希望你输出的内容里边啊,光有这个string啊啊也就是说呢,我直接获取运行室类的副类的泛型,但这个副类的话呢,是带泛型的副类啊啊就这样一个意思,这个四,那这怎么整呢。
03:23
首先呢,你看到我们打印的这个变量里边,它内部包含了这个spring,肯定是基于它再去操作对吧?啊基于它去操作这呢,得到一个它这个结构呢,咱们说啊,如果呢,你这个结构当中确实是带泛形的了。哎,确实呢是带反型的了,实际上呢,我们给它可以做一个强转啊,这咱们有一个呢,叫parameter raised type。啊,Parame read type,它这个意思呢,就是带参数的一个类型是吧,哎这呢,我们就因为这个type呢,它里边包括泛型了,其实准确来讲它就是这样的带参数的,诶不妨呢,我就觉得per type,诶将我们上边这个变量做一个强转。
04:10
来一下。Center,哎,先做一个cost啊,做一个强转,那转成这个per type以后,这个表明,哎你是带参数的,其实也就我们这个泛型参数,它呢有一个方法叫get actual type arguments。这个方法名就够长的了哈,对,越来越长哎,Get actual就是获取你实际上的这个类型参数,就是获取泛型参数啊,获取啊泛型这个参数,或者叫泛型类型吧,啊泛型类型,那么alt enter回车,哎哟,还是个数组。为啥是个数组呢?对你像咱们对咱们这个,你像这个map哈,它这块呢,不就一个K一个V吗?哎,那你具体呢,让某一个类去,比如说啊,继承于它的话呢,哎,这时候你指定的其实就有俩,那俩的话呢,你这块不就是个数组嘛,啊还有可能三个啊四个等等,所以这呢是个数组啊,很容易理解,那在咱们这个问题当中啊,就一个了。
05:19
啊,就一个了啊,那就一个呢,我们就简单一点啊,我就直接呢,我就不去变例了,那直接呢,我试图呢,直接输出一下这个数度零这个位置上就一个嘛,长度也自然而然的就是一。哎,角标零就是我们的第一个位置啊,就它啊直行,哎,你看我们这个四针就出现了。哎,这个string呢就出现了,但是这时候呢,这个string你看它前面还带了个class啊,有的时候我们不想要这个class,我就想直接看到就是个string,对,这个时候呢,我们就会想叫get name了,很遗憾。这有个盖内啊,这什么呢。
06:00
一出啊还出来了是吧,那这呢,就我们获取这个类型的一个名,那这呢就是死string,那这个返回值,哎,我们看到它还是一个string类型的,那用这个方法或者的话呢,你还可以用这个方法啊,那现在的话呢,我们get不到它的name,主要原因呢,是你现在呢,不是一个class class才可以get name,而事实上呢,你这个tap tap呢,我们class呢,还实现了这个tap,你从打印的这个效果上来看,其实它拿到的就是一个class啊,其实呢,大家可以把我们这个tapb呢,大家做一个强转啊,诶强转为我们的class。哎,它本质上也确实是个卡拉啊,这个得到这个克拉斯以后啊,你再对它进行一个,诶,Get name啊这就OK了。哎,这两个都行啊。那这不就拿到了啊也行,那这呢就我们叫获取带泛型的副类的泛型,这里边呢,涉及到这个方法啊,挺长啊,有点绕啊呃,那这个呢,讲它的目的是什么呢?以后我们会有这样的需求。
07:08
啊说还有这样的需求呢,有啊,举个例子,咱们在前边讲应该是第第八天吧,讲泛型的时候,那诶就在这啊咱们讲泛型的时候呢,当时说了一个例子,说呢,呃,自定义泛型类有什么作用,咱们举了个场景,就后边呢,我们会去写这样的一个DAO啊在外部的时候啊写个DAO呢,我们会写个T,当然咱们也说过为什么要定义它了,因为呢,会有具体的这个此类操作,不同的数据库中的表,所以对应过来呢,我们会有不同的这样的一个呃,这个子do啊去继承我们的do,这呢,我们指明一个叫customer。哎,另外这个student do呢,指明的是student,那我们在student do或者是我们的customer do里边就会有这样的需求,获取我们当前这个类的负类的泛型,哎,相当于我们在这个类里边想写个方法就能拿到我们这个customer,这个student deal里边呢,我们就想拿到的是你这个叫student。
08:11
那拿到它有什么意义呢?简单说一下啊,在我们的do里边,咱们写了一个方法叫获取一条记录,查询一条记录,或者叫查询多条记录,这两个功能呢有点类似,你要多个的话呢,就是添加到一个list就是它了,核心呢,其实就找到一个啊,那我们就以它为例,这个方法的话呢,我们写在do里,在这个do的话呢,被我们卡什do呢所继承,自然而然这个方法呢,在我们这个里边是不是就可以用啊,在这里边用的时候呢,因为我们指定了do,它的发型呢,就是一个customeror,所以呢,你拿过来以后,其实相当于这个T呢,就已经被改成是不是一个customeror。哎,没问题哈,诶是个customer了,那在我们这个里边,咱们写这个方法,返回一条这个,呃,返回一个customer的一个对象,那这个对象呢,哎,咱们这没有写方法体,原因就在于咱们是后边讲的知识去写这个方法体,后边这个知识怎么做呀?哎,咱们需要讲circle口,大家呢,要写一条circleq语句,这个circleq语句呢,就到咱们这个数据库,诶我就不开我这个客户端了啊大家应该还记得咱们有个表,我写一个SQL语句,就从这里边呢查出一条数据了,这条数据呢,我们就可以在我们的这个Java代码层面呢拿到这个数据,你拿到的呢,实际上呢,是一个一个的呃名,比如说这个属性名应的这个值是多少啊,一个这个属性名对应的个值是多少,这个属性名对应值是多少,就找到一个一个的属性和它对应的值了,咱们现在需要拿到是一个customer,呃,返回的是个customer啊,那你首先是不是需要造一个对象?
09:46
然后呢,把这个对象的属性是不是一个一个的给它设置成一,把这个属性设置成它,把这个属性设置它这个这样这样诶,然后你再返回,就相当于是你把一条数据呢,完整的哎,这个转化为一个Java类的对象了啊,那这里边有个需求,咱们提到了,说你要创建一个诶。
10:07
这个customer类的对象,我造一个customer类的对象,那这个为什么是customer呢?是不是就是因为我们customer do里边,它继承的是父类的这个do后边写的这个监控号叫customer啊,那么student do呢,他继承了do,哎,它后边写的叫student,我们在这个里边到底要造哪个类的对象,就是因为哎你继承的这个父类这个位置写的是啥,我就造哪个类的对象,所以说我们就会有必要哎获取哎当前这个子类父类的范型。啊,这呢就比较绕了啊,哎,就是这个逻辑呢就越来越强,大家越往后写代码你会发现呢,这个Java这个本身的语法其实不会限制你了,第一个月学习呢,其实就语法在限制你啊,加了个点,少了个分号就老错,到后边呢,这些都不是问题啊,这些问题呢,都转化为逻辑问题啊,你写代码的时候呢,这个逻辑捋不清楚啊,逻辑特别长,原来呢五行能解决的一个逻辑,现在需要写200行,发现吃不动了是吧?哎,逻辑越往后就会越复杂一些啊哎,刚才呢举了一个我们后边要用到的一个情境啊,那这呢,我们就相当于写了这样个事儿啊,获取运行时类,比如说custom do带泛型的副类do啊监号里边那个泛型,看看到底是什么看就这样来写,虽然说要用到,但是大家呢,也没有必要呢,说我就把这个呢,卡拉卡拉自己写出来。
11:35
你把这个呢,代码你保存起来,回头要用的时候呢,CTRLCCTRLV一下是不是就可以了是吧?诶所以通过这个例子呢,先给大家强调一个事啊,就这个代码以后越写越多,代码的话呢,大家可以把它分成两类啊,第一类呢叫做逻辑代码啊啊第二类呢,叫做功能性代码,呃,其实呢,你要非得细说什么叫逻辑性代码,功能性代码里边就没逻辑吗?
12:02
代码不都是逻辑嘛,是吧?哎,那都都算叫逻辑性代码了啊,逻辑啊跟后边对应一下,加个性吧,逻辑逻辑性啊,不是逻辑性代码哈,这个诶逻辑性性代码呢,就是说大家你解决一个问题,哎,你要先干什么,再干什么,后干什么,这个事儿是比较重要的,今天你做这个事儿,明天做那个事儿,里边这个逻辑呢,大家是可以保留下来的,这个是经验啊,更多的要关注于这个问题,比如说啊,你从这个浏览器,我们要发送个数据请求给后台了,后台呢,又把这个数据呢,写到数据库里边,然后又读过来,又响应过来,这个过程当中,这个逻辑先做什么,后做什么,再做什么,这个要清楚啊,要保留下来,这是你的经验,而有一些功能性的代码,你就知道这个代码是干什么事的。可以了,不用去深究,你说哎呀,那我要记不住是不是亏得慌呀,你要这样说的话呢,那个release源码你也自己写去呗,你造啥这个release速度你自己自己去造一个release去用呗,是吧?啊,那给我们API不就让我们用嘛,后边我们还会讲很多开源的第三方炸包拿过来就用,你知道怎么用就行啊,不用去研究里边代码你要都陷进去就出不来了,就跟说你以后有孩子以后先讲甲骨文是吧,等他老的时候呢,他才学到唐朝,那精力有限啊,所以呢,有些东西封装好直接用就完了,不要去深究啊,那这个呢,也可以这样你就知道这个事儿就是干这个用的。
13:33
啊,把这个代码回头一粘就OK了,有的时候呢,前后逻辑需要调一下,哎,那就关注于这个逻辑,哎就行啊,诶所以这块呢,大家要保留下来就是呃,给你降了降降低降低这个难度哈。
我来说两句