00:01
好。那现在我们来看这个案例吧,那既然如此,那么反射能够做的什么事情呢?除了刚才那些,还有哪些事情可以做呢?很多事啊,刚才这个桥连接刚才说过了,还有哪些事呢?你再比如说对结构序列化,诶刚才也说过了,还有什么呢?还有这两个东西,反射重要的一个函数就是type of value of,那这个时候呢,大家大家再来看一下啊,Reflect type of,它可以把变量放进去,获取变量的类型。变量类型,返回的类,返回的这个词是reflect type这个类型,如果你用的是value of呢?返回的是变量的词啊,是什么value这个类型啊,注意准确的讲是返回的这个value类型,注意它不一定是个具体的值,它其实是一个是一个类,是一个结构体。那结构体里面当然有很多信息了,对不对,有很多信息,好,那么如果你是结构体,那当然它就是结构体,你把它输出来,它就有结构体了。
01:00
好几个类型,刚才也领着大家看了对不对,好,接着往下看。好。那么这个又比较重要。在反射中有一个重要的重要的函数和一个概念,就是这里就是反射中呢变量,还有这个空接口,还有reflect value是可以相互转换的,这一点在实际F中会经常用到,这个什么意思呢?大家还看这个图。就一般来讲哈,各位同学一般来讲我们。在如果你是通过一个方法传递过去。就说你把一个变量传递给一个函数,让他去做反射,那一般来讲你这个函数呢,应该是个接口。你不会把它直接传给一个东西,也就是说这里面有一个重要的概念,哪里概念呢,就这我说的是。变量。接口和reflect value相互转换的一个示意图,我画一下啊,我画一下这个示意图,这个很重要,待会儿呢,我们也会讲这个东西。
02:04
好,我把这个呢给同学们分析一下。在反射的过程中,我们的这个基本的形式是这样子的。写到这里。好把它放大一点,我说一下啊。在反射的过程中,我们基本的形式一般是这样子的。在使用反射的过程中,过程中通常的通常的这个方法或者方式是这样子的,怎样做的呢?举个例子。比如各位同学,我举个示意图啊,比如我这里有一个变量。假设是个结构体吧,我们说假设是个结构体,Vrs to dts to。好,然后这个结构体,你一般怎么去玩这个反射呢?一般会把这个结构体传给一个函数。比如说我这里有个函数叫test。
03:00
Fun test。然后这个test呢,各位同学。这个这个test呢,一般它不但可以去反射student,它也可以反回反射其他的。其他的一些类型,比如说我既可以反射你的student这种实例,我也可能去反射一个非常简单的一个number类型,那这个时候我们这个这个函数T的函数呢,它接收参数的时候呢,它一般是这样接收的,比如说b interface。各位interface。那也就是说在我们实际的这个工作中,在玩反射的时候,通常你这个,比如说这个是专门专门用于用于做反射的,用于做反射的。那你一般会怎么做呢?你会把这个值就是这个16的传给它,所以说这个地方呢,一般来讲是一个接空接口类型。
04:00
这方一一定是一个空间构类型。好,那么所以说,所以说你在传的时候,一般情况是这样子的,这有一个职称传到这边来。好,这个四个亿啊,传到他的这个这个这个地方去。好传到这地方去,那我。把这个。这个这个怎么点不中呢。好点点不中就就先不要了啊,不行先不要了,好紧接着往里面走,那么你这个接口,你这个拿到这个BB呢,一般就说我们真正把它转成这种reflect value呢,通常情况下怎么把它转呢?是这样子的啊,就是通过这个东西我们也可以转,转的时候是这样转的。这样一个重要概念就是如何如何将。哎,如何将一个空接口。Interface,注意听interface这个空间转成。
05:03
就转成什么呢,我们需要的这个类型reflect点六呢。啊,Vae它是怎么转的呢?非常简单,它用的是一个函数,比如说我们转成一个value啊,比如说re反射的这个value,我这样写等于什么呢?一般来讲我们是要做的reflect.value of。I value of。OK,然后把这个B传进去,所以说所以说我们要把interface转成这种类型呢,我们一般用的是这种方式。就大家看到的这个东西,那有又有一个问题了,说老师那我有一种可能性,将来我又把需要把这个类型又重新再转回。谁?有这种可能性,而且还比较多,这个时候呢,我们又怎么做的呢?好,同学们看。在实际开发中呢,我们来看这个这个功能第一步。就是先解决一个这样的问题,如何将将什么呢?将这种类型,注意听啊,不着急,这个将哪种类型呢?将这个reflect的这种类型转成空接口类型。
06:17
这个很有用。因为有时候呢,你往往先把它转到空接口,然后再做下一步工作,这时呢用的是它的一个方法,比如说我写个叫IVI,就是叫的一个一个接口,那这个时候一般是怎么做的呢?各位同学是用上面的。这个RV这个里面的提供的一个方法,它的方法是叫这个interface,注意这个I是大写的。Interface。就这样做的,Interface一个方法。这个地方这个就这个它又变成一个接口了。它变成一个接口,也就是说这个时候呢,我们又实现了一个把这个反射过后的类型转成了一个空接口类型。
07:00
那这个方法在哪里可以看得到呢?同学们,我给大家简单看一下啊,这个方法大家应应该刚才已经看过了,这个方法怎么看的呢?各位同学是在这打开我们的这个value,你会发现真的会有一个interface。好,我搜一下啊,这个手册做的不是特别的漂亮。Interface,好,我找到了,是他,果然是,大家看这里。本方法将返回V持有的值返回是一个什么类型?结可能性。因为有时候这个接口呢,它很有用,它可以做一些类型类型断言啊,或者说一个更广泛的一个应用,好又拿到它了,那下一步接着做,第三步在我们开发中呢,有时候我们还会做一个特别重要的功能,就是是因为你的目标是要把它再重新转回成他们。这是有可能的,而且还经常多,下面呢,又要完成一些事情,如何如何将这个interface这种类型,这种空接口这类型啊转成。
08:03
转成我们原先的这种变量类型。原来的,原来的变量类型,OK,原来的变量类型。那么这个怎么做呢?非常的简单,使用类型断言即可。使用类型断言。好,那也就是说其实你要只要做这一件事就可以了,比如说我们叫做VV就是变量的这个变量这个类型啊,真正的变量类型,那么它怎么做的呢?非常简单,把上面的这个东西拿过来。拿过来点,直接断言。比如说我想把它转成原先的这个student,那我这就放一个这个东西就可以了。那此时此刻,这个V呢,又变成了,它相当于转了一圈。转了一圈回去了,那这个呢,我们在在这个做这个反射的时候会经常用到,那反过来就是说他们之间的关系其实是这样子的,倒时间做反射式,我把这个值传给了一个空接口,空接口去获取,通过这个这个这个传过来,B呢,我拿到了它的一个类型,就是reflect value,再如果要要继续玩,因为后面呢,我们要要去做一些其他其他工作,又想把它转回去呢,先把它转成一个这个空接口,再用空接口断言又转回去了,所以它们之间的关系是这样子的,同学们打开这个图。
09:33
打开这个图啊,请看。这个图呢,我是画的很清楚的,大家看这里。变量。通过传递参数交给一个空接口,空接口通过我们反射的一个函数叫value of,就少写个of啊,不要去管它,然后呢,就拿到了这个反射的value类型,通过这个反射的value类型呢,我们可以再再通过这个再返回去变成接口,怎么做的呢?这个是V点在这个东西写的有问题啊,这么写的小问题是用它的一个函数。
10:10
啊,这个I是大写的又转回去,它又怎么又回去,又回到这个断言呢,又回到这个变量呢?使用断言,你看它们之间的关系是可以随意的进行一个切换的,就我想到哪都可以。好,所以这个关系图大家要有一个基本认识啊,待会儿我会用到这个,好,有了这个基本知识过后呢,咱们心里面就有底了,那下面呢,玩起来就比较比较轻松了,好,我把刚才讲的东西给大家做一个板板书啊OK,我把刚才讲的这个东西呢给家做一个板书。好,我们刚才讲到了它的一个应用的一个场景。好应用的场景。啊,标题三。标题三。好,应用场景里面这些,我把它直接拿过来就行了。
11:02
啊,有有些应用场景,上午其实提过。对吧,诶这是一个,然后呢,各位同学,诶这个又是一个对吧,这这个这个我们讲的是什么呢?讲的是不不是应用场景了,是它的一个重要的函数啊,这这个是应用场景。啊,应用层结构体,就上午已经说过这个事,只是放放到这再说了一遍。好。好,然后呢,我们这边又讲了它重要的这个反射的重要的函数和概念啊,刚才提到了两个特别重要东西,一个是呃,Reflect态度,一个是reflect这个value,好,这个呢,我们把它反输到笔记里面去。好,给大家一个标题三。加了一个标题三好,这个标题三里面呢,我们提到了这么两个东西,好这块我就板述过来就行。好,给他截一个图啊。放到笔记里边去。
12:01
紧接着呢,我们再来看下面还有一个就是这个,这个图比较重要,我把这个粘过来。好,这是我们说的第三点。好哦,我们画出了一个示意图。我们画的这个示意图是老师刚才在这做了一个板书,诶。这是它具体的代码啊,具体代码我写到这重点来说就是这里。一个是传递过去。第二个。转第三个转空接口,再转回去,这样又回到这边了。好,这是它的一个示意,然后呢,呃,他们之间的一个转换图,我也给他拷贝过来,转换图是在这里。在这个地方好,有了这样一个基本基本知识,基本的一个知识结构过后呢,下面我们就来熟悉它的各个函数。下面我们就来熟悉它的各个函数,好下面是哪一个呢?下面就是一个快速入门了,我们前面已经把基本东西说完了啊,包括它的原理,包括它涉及到的变量,空接口,还有它的重要的两两个这个反射的类型,一个是type,一个是什么呀,一个是value,好,关于这个基本我们先说到这。
我来说两句