前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反射机制

反射机制

作者头像
端碗吹水
发布2020-09-23 10:38:51
3350
发布2020-09-23 10:38:51
举报
文章被收录于专栏:程序猿的大杂烩

反射机制:

反射机制是能够帮助我们把代码变得更加灵活,可扩展性更高,俗称“软编程、软写法”。例如:有一个文件里面有一些值,想要把这些值赋值到一个Student类的属性中,按照以前所学到的知识点,只能是通过文件流将文件里的值读取出来,然后再通过set方法将这些值都赋给Student类的属性。但是,这种方式是将代码写死了,在这之后会有一个问题就是如果文件里的内容发生变动,或者要把这个Student类更换成Dog类的话,就要重新修改代码。程序写好了部署到服务器上运行了,总不能时不时就打开来修改吧。

示意图:

bdf308eca83ec77425628f1337d6fb3f.png
bdf308eca83ec77425628f1337d6fb3f.png

那么要解决这个问题,就得使用到反射机制,在怎么使用反射机制解决这个问题之前,我们先学习一个类,这个类名叫Class,注意这是类不是class关键字。每一个类都能获得Class对象,通过这个对象就可以操作那个类。例如:Dog类可以获得Class对象,通过这个对象可以构建Dog类的对象,还可以对Dog类的属性进行赋值,对方法能够进行调用等等,还能获得这个类的所有的信息,比如这个类的父类是哪个,实现了什么接口,路径在哪等等。

获得Class对象的方法有三种,但是其中两种是死写法,一种是软写法,软写法是因为使用的字符串描述的类名,字符串是可以变动的,要更改类的时候只需要更改字符串即可。

  代码示例:

e781adeb88540dc1a5a97186716fe4d8.png
e781adeb88540dc1a5a97186716fe4d8.png

使用这个对象可以获得Test类的信息:

daf99c6e476a765bcfaee61a56443bfe.png
daf99c6e476a765bcfaee61a56443bfe.png

运行结果:

5d127596637a621c8a93be9a45120add.png
5d127596637a621c8a93be9a45120add.png

使用这个对象可以获得Test类的成员:

fda505a5ad9935ae9ba1679560e7d910.png
fda505a5ad9935ae9ba1679560e7d910.png

运行结果:

d794d7f9cb738dd82ec0a9c9ee8de02d.png
d794d7f9cb738dd82ec0a9c9ee8de02d.png

使用这个对象还可以对某个类的的属性进行赋值,还能调用方法和构造器,还能给方法和构造器传递参数。我们做个试验:声明一个Student类,在这个类里写一些属性、方法和构造器,然后通过Test类来进行赋值、调用和传递参数。

  Student类代码示例:

e00bff5068505cad92398035d456b24d.png
e00bff5068505cad92398035d456b24d.png

Test类代码示例:

9305509be262ce717a619d07bc7b325f.png
9305509be262ce717a619d07bc7b325f.png

运行结果:

42b1ba3c43a02c07a9bbc47b10521553.png
42b1ba3c43a02c07a9bbc47b10521553.png

现在我们就可以运用以上的知识点来解决一开始的那个问题了,先编辑一个文本里面写一些属性值,然后再写一个Teacher类写上对应的属性,然后将属性进行封装,然后写一个Test类通过Class对象来对Teacher类的属性进行赋值。

  文件内容:

273009532f0889e65c957ad3c60fa645.png
273009532f0889e65c957ad3c60fa645.png

Teacher类代码示例:

3371ce3aa82ab5745091f6adf0150171.png
3371ce3aa82ab5745091f6adf0150171.png
328cc54e566fc5dbc76d9804f2bb1933.png
328cc54e566fc5dbc76d9804f2bb1933.png

Test类代码示例:

ee868fc4e7a8cbacdf896e9e06cb1d14.png
ee868fc4e7a8cbacdf896e9e06cb1d14.png

运行结果:

ab15bebeb352b71008b67337c7bccb0d.png
ab15bebeb352b71008b67337c7bccb0d.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档