00:01
OK,接下来我们写一写了啊,同学们,呃,那我们再回到这个有条中,我们再去用上一个盖类啊。Object啊,我们叫MY病友啊。行,那这个工具类我们主要做什么事情,给大家去解释一下啊,就是呃,实现这个对象拷贝啊,对象属性的拷贝啊。对吧,好,那我们就提供一个方法吧,Deff,我们就叫什么就叫copy copy吧啊或者什么copy什么,呃,Copy啊就叫就叫这个吧,好呃,那你要进行拷贝的话,你首先得给我两个对象啊,一个是。就是原对象啊,它是一个any anyraft吧,对吧,然后再来一个就是目标对象啊,Test object,好,它也是一个raft啊,将来写个注释啊,就是将啊原对象啊,就是将这个s RC object中。
01:07
属性的值拷贝到test object中对应的这个属性上。理解吧,这是你的原对象啊,就是被拷贝的那个,然后这是你的目标对象,就是你要把属性拷贝到谁里面。OK吧,行呃,那这个方法的写的话呢,因为我们是要做一个通用的啊,所以说呢,你一定是不能把什么所谓的什么mid啊这些东西给他写,写死的啊,你写死了以后,你这个只能是让他们两个去用,你别的都用不了。对吧,说说把什么写成一个灵活的,那你要写成灵活的话呢,呃,我们就对什么通过反射的方式来去写了,对吧,说这个方法我们会用到这个反射的知识点啊,来一起来写一写吧,呃,那进来以后呢,我们做一个基本的这个判断操作啊,如果说你的s RC object是等于等于空的,或者说呢,你这个object也是等于等于空的,那这个就是直接return了。
02:02
明白吧,啊,就直接称了这个代码就不用执行了,你这肯定是做不了拷贝的,你的空你咋拷贝啊。只要有一个是空,那我就不拷贝了。好吧,只要有一个空是不拷贝的啊行呃,那如果说你们不为空的情况下,那我就可以进行拷贝,拷贝的话呢,我们现在就有两种方式啊,就是第一种方式就是什么呀。呃,看你从哪个出发吧啊,你可以从从它里面拿到所有的属性,然后呢,到它里面挨个去找,或者说呢,我从它里面拿到所有的属性,到它里面挨个去找。这个都行。啊,但其实呢,呃,从它里面拿属性到它里面去找会好一点,因为我们的目的就是把它里面的东西尽可能多的往它里面拷贝。对吧,那假如说它里面有十个字段,它里面有20个字段。对吧,那这个时候如果你要从他作为出发点去判断的话,那你至少要判断20次,但是你从它作为出发点判断的话,你只要判断十次就可以了,因为我总共就有十个字段,我最多只能拷给你十个字段。
03:00
对吧,所以你就看一下这两个对象,你从哪个出发,主要是看谁的字段比较少。你就少判断几次。明白了吧,那我就从它来去出发了啊,OK,那我们干嘛呢?就是我们要先获取到,先获取到就是这个目标对象啊中所有的这个所有的字段啊,所有的属性,好这个怎么获取呢?这个比较简单啊,就是直接什么s RC object,讲什么get class.get declared。好,这是我们这个s RC field啊。OK,那我就拿到这个所有的属性。能看到吧,好,拿到这个所有的属性以后,接下来就是什么去迭代你的每一个属性,然后呢,去完成我们想要的功能啊,来我们处理每个属性,每个属性的这个贝啊,每个属性的拷贝啊好,那这个怎么处理呢?我们需要去做一个迭代啊两副。
04:04
能看到吧一下啊,然后这个就是我们的src。OK,那你拿到每一个属性以后,接下来我们做什么操作呢?听好了啊,呃,你可以直接操作你的属性也可以,什么操作属性对应的这个概率和赛的方法能听到吧,就是最好还是去操作它的方法,如果你有方法,我们最好操作方法,虽然说反射我们是可以直接操作属性的,但是呢,我们尽可能还是呃做的更更什么更加的这个就是合理一点啊,一般我们要求就是操作你的属性都是什么,通过方法来去操作的,能理解吧。说要去操作这个方法啊,但你要这个操作方法的话呢,我们就需要用到什么这个get和set方法,但是很明显我们这里面是没有提供什么所谓的get和set方法。对吧,因为它不是那个Java病啊,Java病的话,那你肯定要去提供那个set呀,还有什么什么get呀,对吧,他现在是一个盖的一个什么样例类啊,我们不提供什么get和set方法。
05:04
就不要求你去提供这个东西,而且一般情况下,我们在这个SKY当中也不会去提供它。明白吧,啊,但是呢,没关系啊,你虽然说你不提供啊,我知道的是一个什么事呢,这个盖LA中啊,啊为什么会自动啊为类中的属性提供get和set方法,当然人家这个get和set方法长什么样子啊,就是你的set啊,先说get吧和set啊,它的方法长这样子的啊,我不知道你们还有没有印象啊,Get呢,其实就是你的属性的名字啊,就是felt。Name对吧,这是我的一个什么get方法,Side方法是这样子的啊field啊,Fair name,然后下方下double EQ对吧?当然这里面需要是传你的类型啊,就是这个参数的类型啊,就是一个呃,参数类型啊。对吧,这个我不知道你们还有没有印象啊,当初讲SKY肯定给你们说过啊,而且当时我们是重点去研究过这个get和赛的方法的。
06:10
对吧,当然哈,如果说我就想基于我们这个传统的get和set方法来去做,行不行呢?行,那你就什么给他们去提供了一个get和赛。对吧,不过这样我觉得会更麻烦啊,你还得提供那个概率和塞的方法啊,所以我们要什么直接使用这个来去做。好吧,来这个点,如果你忘了同学你下去,我自己看去啊,自己看去啊。行,呃,那我们知道他有这个get和赛的方法以后,那接下来我就会什么,把他的这个get的方法和S方法的名字先拼出来啊来,这是我们的先把这个呃,Get method的name拼出来。对吧,Get method name方法名字先拼出来啊呃,他的名字应该就直接就是这个了啊,直接就是你的叫s RC field,这样get name就可以了。
07:00
对吧,然后你的这个赛车method name。好字符串啊,那就是什么呀。呃,那就是你的src。Failed,然后呢叫get name好,后面加上什么呀,加上。这个这个这个下划线到了EQ。能理解吧?这是我的这个set name啊,一个是get一个什么site,好,那你这个有了以后,接下来我们的目标就是这样子的啊,就从什么呀,从s RC object中啊,获取什么side方法对象啊,获取什么get方法对象啊get方法对象对吧,然后呢,从你的desk object中获取site方法对象对吧?最后呢,什么将s RC object中。
08:02
啊,就调用吧。来说一下啊,就是调用啊好调用什么调用这个盖的方法对吧,获取到s RC object属性的值,然后呢负值,然后呢,调用什么调用。在啊,在调用什么,再调用呃,Set方法将获取到的属性值赋值给desk object的属性。OK吧,行,那你就获取一下吧,这个钙的方法是一定能够获取的啊,因为什么呀,因为我们现在所有的这个属性啊,我都是从你的这个原对象中拿出来的,那么既然我能够从你的原对象拿到这个属性,那么你就一定会有这个盖的方法。对吧,说我可以什么放心大胆去拿啊,放心大胆的去拿来拿一下。这个怎么拿呀。嗯。
09:00
怎么拿呀,同学们啊,是不是还是通过你的叫s RC field加get class。Get class get declared。Method。对吧,Declare的这个method啊。能看到吧,然后我们的get的方法,我们的get的方法它是没有参数的啊,对吧,你知道吧,Get的方法是没有参数的啊,所以你这什么把这个get method name放到这好,这是我的get method。理解吧,那接下来我们拿的是你的这个set方法啊,Set方法就是s r field叫get class。讲什么呀,Get declared,呃,我看看啊呃,来讲get什么declared这个field。呃,Declare method啊,OK,那你的set方法它是有参数的啊,我们先把这个名字写到这,Set method name写到这,注意它的参数是什么呀,大家想想。
10:07
你的赛的方法,如果你要晒的话,比如说呃。这个大家应该能够想得到哈,假如说我有一个就是字符串的啊,比如说啊,来写个注释啊,我有一个什么呀,就是呃,就从这个Java的角度来来来分析啊,因为这样你好理解,我有个字符串的name,那我的get方法就是什么get name对吧?那我的set方法就是什么set name,这里面我是不是要给人家传进来一个值呀。那你传下来这个值一定是要给它赋值的,所以这里面你肯定传的是一个字符串的一个名字,字符串的一个类型,对吧,这样的话你在它里面就可以怎么写呢?就是这么去解,这似这样name等于name对吧,所以说我是可以推断出来的啊,你的赛方法的这个参数的类型一定是你当前属性的类型啊,因此我这个set方法的这个参数类型就是我s RC field这样get type。对吧。就你这个属性的一个类型,就是我这个set方法,它的这个参数的类型啊,这是我的set。
11:08
能听懂吧。啊,这个你要能够理解的啊,行,但是这一行代码如果说你直接这么写的话,它会有问题,它会有什么问题呢?因为你现在是从你的。嗯,哎,不对啊,不能是,呃,我看看啊。呃。我看看啊,这个这么写对不对呢?呃。啊,不要这么写啊,不要这么写啊,这么写。这么写啊,从对象中去获取啊。对吧,这么写啊。然后对吧,这么去写啊,从你的对象里面去拿啊,OK,呃,就这么写的话,会有这个问题,会有什么问题呢?因为我们所有的这个属性啊,就这些方法是怎么来的,是从是基于我的src这个object来的,就比如它有一个属性A。
12:01
对吧,那我就一定能能够拿到你的这个钙的方法。能听到吧,但是呢,你到了这个desk object里面,它就不一定有属性A了。所以说你在获取的时候呢,你得去做判断,它能不能够获取得到,如果能获取到,那就获取到,如果获取不到,那对不起,那就获取不到。明白了吧,好,那这个怎么做判断呢?呃,这个方法啊,正常情况下,如果说我获取不到的话,它会报一个异常,就是叫什么no such method,对吧,你们应该都见到过啊,就是没有这个方法的一个异常,那因此的话呢,我们最好是把你的这个代码呀,给它作为一个什么呀拆开。好吧,作为一个叉开。能理解吧,如果说我能够catch到你的异常,听完了,同学们,如果说我能够catch到你的异常,OK,这里面我就kiss。Ex。呃,Exception吧,我就直接写这个异常了啊,如果说你是有异常了,那这个异常正常情况都是一个,那个异常叫什么叫,呃,我搜索一下啊,叫no such method exception啊,它应该是这个异常啊,对吧?啊,当然我就什么直接拿这个大异常去处理了啊,反正就是只要你有一,只要你有异常,那我要做什么操作呢?我就做这操作啊,就是这个方法我就不处理了,就说白了,我有一个A属性,我想拷贝给你,但是你没有A属性,那我的这个属性我就不做处理了,我就接着处理下一个属性。
13:29
对吧,因为我们是在这个循环里面啊,所以我可以这么去做,那我什么直接去跳过本次循环。对吧,那你怎么跳过本次循环呢?我们是没有那个什么什么continue的啊,所以我会这么去做,就是直接。Breaks break。讲break好,但如果说你直接break的话,它为什么会导致你整个这个方法都结束啊,因为他也是在抛异常对不对。他也在抛异常,OK,那你的这个异常我就要什么把它捕捉起来,怎么捕捉呢?那我就要把我整个这个代码的执行,整个代码的执行看好了,同学们整个代码的执行,然后呢,呃,给它捕捉起来啊,那我们这么来去写,就是breaks,叫breakable。
14:14
对吧,我把整个代码。搁到这里面。能看到吧,什么意思,能看了啊。就是如果说你代码是正常执行的,那就正常走走走走走一直往下走,对吧,当你走到这以后,如果说你是能够正确的获取到的,OK,那我就把获取到的值我就复制给他了。能理解吧,如果说我这个地方是获取不到的,我抛异常了,那我这个异常我会什么呀,捕获到,捕获到以后呢,我又给你抛了个异常,那我抛的这个异常呢,就会什么,就会被他捕获处理。能明白吧,那它就不会导致我负循环的结束,那我会什么?我会重新去执行一次。就会什么处理你的下一个字段OK吧,行来这要知道啊,行,那我们就把这个方法就拿到了啊,拿到以后呢。
15:02
接下来你看啊,你的get method和set method都拿到了,但是呢,呃,如果说你想做的更加的靠谱一点啊,你要去考虑一个事儿,什么事呢?就是我这里面啊,有没有某个属性是Val声明的。如果说你是V声明的,那你什么你去操作的话呢,就。是不太好操作呀,对吧,就不让你V,不就相当于什么final吗?能明白吧,你就相当于是个final啊,如果你是final的话,那我就不做处理了,因为人家定义成final就表示我是不想让你去改的,虽然说我通过反射呢也能改啊,也能改,但是呢,我不想让你改。能理解吧,那我们就不改了啊,那这个代码怎么写呢?那我们可以这么去写啊,就是呃。我想想啊。这个怎么写啊,嗯。判断怎么怎么,怎么判断。判断它的这个修饰符呗,对吧,但你但是因为我们这现在这个属性啊,我们都是从都是从从它里面去拿的哈,那我就这样去写吧,这样去写啊。
16:08
就如果你代码能够执行到这了啊呃,如果代码能够执行到这了,哎呀,就是忽略这个final啊。忽略这个VR属性啊,那你的代码如果能够能够执行到这了,说明你当前这个当前这个属性肯定是有的啊,那我就可以这么去获取了啊,就是叫object点什么呀,Get class点什么get declared这个field我再来获取一下吧,叫s RC field。呃的改成name对吧,我把这个属性拿出来。明白了吧,好,拿出来以后呢,这是我的的field field。对吧,Field OK,这是我的desk field啊,那我要判断一下啊,如果说如果说你这个desk field它的get,呃,Mo点,嗯。
17:11
ES吧。对吧,有一个叫做。Mo fair,我找找是谁啊,呃,应该是Java的啊,Java的反射的这个吧,Mo fair的这个叫做final对吧?诶是这么样这样子的啊,就是如果说你的这个修饰符呢,是哎跟这个翻斗是一样的,OK,那同样我也这么直接来一个什么break,是这样,这个break就说白了,我的这个属性我也不做处理。明白吧,哎,我就可以把它忽略掉了啊,像这样写也可以啊,就当然你要去考虑有没有这种情况,如果是有的话,你就这么去做,如果没有的话呢,呃,那你不做也行。好吧,行OK,那写到这以后的话,我们正常的这个就都通了啊,通了以后最后就差一步。啊,我看看啊,这个是,呃,那我把它也得拿进来啊。
18:03
对吧,都拿到这里面啊。就这个括号,不就是我们这个break的这个括号嘛,对吧,来接下来我们就干嘛呢,做这个操作,看好了啊,就直接呃,拿上你的s RC object对吧,我们去,呃,不对,应该是这个啊,叫set method,叫in work,那我执行的时候呢,把我的s RC object放进来。然后对吧,然后呢,这个就相当于什么,相当于拿到了你的,呃,错了啊,老写错get啊,In work,然后呢,把这个s RC object放进来,就是我从你的这个对象中,把我当前这个属性的名字给它,属性的值给它拿出来,拿出来以后呢,我要设置到什么呀,就是我的site method叫in work,我要往我的。Object里面去放,后面给的是什么呀?后面给的就是你的参数值,那你这个参数值的话呢,不就是它吗?对吧,把它拿过来这就可以了。OK吧?
19:02
好,这样就写好了啊行呃,那把这个方法写好以后,我们做一个做一个测试啊,做一个测试来好,这个怎么测呢?那我就定一个配置log吧,定一个配置log啊,这个配置log的话我看看啊,它里面的东西还比较多,我给几个吧啊给几个能够大概试一下就行了啊给上几个,比如说mid是MID1。1001啊,用户ID是比如说UID啊101对吧,后面是啥呀啊,你看他就行了啊来后面是这个pro ID表示就叫PPV,然后呢,101啊随便写的啊,后面我就不给了啊,就给空吧。好多给一些空啊。还差吗?呃,我看看啊,这里面还有个浪是吧,呃。
20:03
呃,最后一个TS啊,还有一个浪是吧,我看看这个到哪了啊。呃,到TS呢,这个也是一个0L0L,然后后面也是一个呃。不对啊,应该前面这个是零幺是吧,好,这是一个呢啊OK,后面这个时间,时间上我随便给一个吧,123456。对吧,这样就可以了啊,就是我把这个呃,随便给了一些值啊好,那我给完这个值以后,大家注意哈,这个是前面的三个啊,就是我们的m midu ID和pro ID,然后呢,这个是那个TS。对吧,行,那这个有了以后来把它接收回来,好,这是我的配置log。配置到。接下来我们再来搞一个用上一个dau音符,好,它是一个空的啊,这里面什么都没有啊,我们来输出一下啊,就是这个拷贝前对吧,加上这个do ino OK,然后呢,接下来做一个拷贝啊,那就什么直接什么copy pro。
21:06
Copy pro,然后把你的原对象叫配置log传过来,目标对象do传过来,拷贝完以后我们再来做一个打印啊叫拷贝后,好拷贝后然后加上这个。Deal info对吧?来做一个测试啊。好看一下吧,拷贝前的话,你就是全都是空的啊。对不对,全都是空的值,然后然后拷贝后你看一下啊,这个过来了吧,前三个你看这个DAO里面的字段啊,前三个是不是m mid u ID pro ID是不是拷贝过来了,以及我们给了个TS啊,它的TS也是最后一个,那你看最后一个有没有值啊。是不是也有纸啊?对吧,哎,那么这样的话,基本上我们这个功能就把它写好了。好吧,行,那这个功能写好以后,那接下来你就回到你的这个这个地方。
22:00
我想去什么去补充你的这个什么呀,就是把这个属性拷贝过去,那我怎么做呢?那我只需要MYBU。呃,对吧,然后直接什么copy,把你的配置logo放到这,把你的。配置log放在这,把你的dau in放到这搞定。对吧,这一步就一下就完成了啊,就省得你一个一个什么你调出来,然后再给它复制调出来再给它复制,调出来再给他复制。明白了吧,而且我们写的这个呀,呃,也是相对是可以什么通用的啊,就是只要你有这个对象,两个对象,然后呢,只要保证他们对象的这个属性,属性名是一样的啊,一定要属性名一样,如果你的属性名不一样,那我是做不了这个事的。对吧,因为我哪知道你的A跟A跟B是对应的呀。对吧,啊,只要你是A跟A,那我是能够做的。明白了吧啊,这是我们的对象属性的一个拷贝啊,就把它这个写完了啊好了,呃,基本功能有就行了啊,然后这个别的情况我就不再考虑啊行,那我们这个就把它搞定,搞定以后呢,下面就是补充其他维度啊来听一下。
我来说两句