\
创新互联一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以成都网站设计、成都网站建设、外贸网站建设、移动互联产品、成都营销网站建设服务为核心业务。10年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
本文转载自微信公众号「狼王编程」,作者狼王。转载本文请联系狼王编程公众号。
这篇让我们聊聊什么是反射,为啥好多程序员听到反射就莫名的害怕呢,本文给你壮壮胆,其实没多少东西的!
在Java中,想要运行时操作对象的方法、属性,其中有效的手段,就有反射。这也是框架最常使用的手段,因为框架在编译时并不知晓系统中有哪些类会被使用。
Java中对象的类型信息在运行时由Class对象表示,Class对象是伴随类加载而实例化产生的,而反射的实现就围绕着Class对象。
有很多种方式可以获取类的Class对象,包括:
- Class
- Class> c2 = Class.forName("java.lang.Object");
- Class> c3 = new Object().getClass();
反射可以做什么?
1. 实例化对象
对象的实例化,可以通过new关键字直接实例化,也可以通过反射,例如:
- class.newInstance()
- class.getConstructor(Class>... parameterTypes).newInstance(Object ... initargs)
为什么需要用反射来进行对象实例化?
有不能使用new关键字直接实例化对象的场景,例如:Spring容器管理的Bean,只能通过类的全限定名加载类,然后反射实例化。
在不想使用new关键字的场景,目的是为了简化编程,使代码美观,可能大家经常看到类似的用法,例如:
- public static
T parseObject(String text, Class clazz) { - return parseObject(text, clazz, new Feature[0]);
- }
- /**
- * 简单的复制出新类型对象
- */
- public static
D map(S source, ClassdestinationClass){ - return mapper.map(source, destinationClass);
- }
2. 筛选合适的类
实际开发中,经常会有这种需要,如果类有某某特征,就进行某某操作。在Spring进行扫描的时候,我们会通过过滤器,来精细化控制bean的生成,包括:
3. 方法调用
有些场景不能或者不合适直接调用方法,例如:我们处理HTTP请求,需要从URI映射到方法调用,如果我们能够穷举所有的URL到对象方法的映射关系,那么也没问题,但是无数的if条件判断,显然不是明智的选择。
通常我们先会获取资源对象,然后反射调用对象的方法。
- Method.invoke(Object obj, Object... args)
如何获取对象的方法对象,也就是Method对象呢?Class类提供了以下实现:
- Method[] getMethods();
- Method[] getDeclaredMethods();
- Method getMethod(String name, Class>... parameterTypes);
- Method getDeclaredMethod(String name, Class>... parameterTypes);
这些方法可以分为两类:
推荐使用工具类:org.apache.commons.lang3.reflect.MethodUtils 此类中包含遍历所有父类查找方法、当前类查找public方法或者反射执行方法的便捷操作。
4. 属性操作
- Class.getFields(), Class.getField(String),
- Class.getDeclaredFields(), Class.getDeclaredField(String)
命名规则同方法,推荐使用工具类:org.apache.commons.lang3.FieldUtils,进行读取或者赋值操作。
反射进行赋值有几点需要注意:
最后如果对当前对象的所有方法,或者所有字段进行某种操作,那么推荐工具类:org.springframework.util.ReflectionUtils
4、总结
所以反射其实没那么可怕,消灭恐惧的最好办法就是面对恐惧,加油学起来吧!
当前名称:担心被问到-反射,我来给你壮壮胆
网页地址:http://www.csdahua.cn/qtweb/news32/14982.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网