在学习Java基础的时候,一般都会学过反射。我在初学反射的时候,并不能理解反射是用来干嘛的。学了一些API发现:“明明我自己能直接new一个对象,为什么它要绕一个圈子,先拿到Class对象,再调用Class对象的方法来创建对象呢,这不是多余吗?”
我现在认为用反射主要有两个原因:
提高程序的灵活性
屏蔽掉实现的细节,让使用者更加方便好用
理由很简单,人们不想修改代码。只要存在有变动的地方,我写在配置里边,不香吗?但凡有一天,我的username,password,url甚至是数据库都改了,我都能够通过修改配置的方式去实现。
不需要动我丝毫的代码,改下配置就完事了,这就能提供程序的灵活性。
有人可能会问:“那还是要改啊,我改代码也很快啊,你改配置不也是要改吗”。
其实不一样的,我举个例子:
三歪写了一个JDBC组件,把各种配置都写死在代码上,比如上面的driver/username/数据库连接数等等。现在三歪不干了,要跑路了。
敖丙来接手三歪的代码,敖丙刚开始接手项目,公司说要换数据库。敖丙给领导说:这玩意,我改改配置就好了,几分钟完事。
敖丙找了半天都没找到配置的地方,由于三歪写的代码又臭又烂,找了半天才找到入口和对应的位置。
改代码的风险要比改配置大,即便不知道代码的实现都能通过改配置来完成要做的事。这种就能通过可配的,其内部很可能就是通过反射来做的。
作者:Java3y
链接:https://www.zhihu.com/question/377483107/answer/1079967402
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
将类的各个组成部分封装为其他对象,可以在程序运行的过程中操作这些对象。