我的编程空间,编程开发者的网络收藏夹
学习永远不晚

反射可以做什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

反射可以做什么

反射可以做什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在Java中,想要运行时操作对象的方法、属性,其中有效的手段,就有反射。这也是框架最常使用的手段,因为框架在编译时并不知晓系统中有哪些类会被使用。

Java中对象的类型信息在运行时由Class对象表示,Class对象是伴随类加载而实例化产生的,而反射的实现就围绕着Class对象。

有很多种方式可以获取类的Class对象,包括:

Class<Object> c1 = Object.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> T parseObject(String text, Class<T> clazz) {   return parseObject(text, clazz, new Feature[0]); }
 public static <S, D> D map(S source, Class<D> destinationClass){   return mapper.map(source, destinationClass); }

2. 筛选合适的类

实际开发中,经常会有这种需要,如果类有某某特征,就进行某某操作。在Spring进行扫描的时候,我们会通过过滤器,来精细化控制bean的生成,包括:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 根据isInstance(Object obj)判断是否实现某某接口或者继承特殊的父类;

  3. 根据isAnnotationPresent(Class  annotationClass)判断是否被注解标记。

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);

这些方法可以分为两类:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 方法签名中带有Declared的,会在当前类的所有方法中查找,但不会遍历父类。

  3. 不带Declared的会遍历所有父类,但只会查找public方法。

推荐使用工具类:org.apache.commons.lang3.reflect.MethodUtils  此类中包含遍历所有父类查找方法、当前类查找public方法或者反射执行方法的便捷操作。

4. 属性操作

Class.getFields(), Class.getField(String),  Class.getDeclaredFields(), Class.getDeclaredField(String)

命名规则同方法,推荐使用工具类:org.apache.commons.lang3.FieldUtils,进行读取或者赋值操作。

反射进行赋值有几点需要注意:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 如果不为public类型,那么设置字段前必须通过Field.setAccessible(true)方法进行访问权限设置,不然会抛出异常:IllegalAccessException  。

  3. 如果字段为static类型,那么通过set方法进行赋值时,会忽略obj对象,因为静态字段属于类。

  4. 如果字段为final类型,不管是public还是  private,那么用set方法赋值时,只有setAccessible进行访问权限设置后,才能正确调用,不然会报异常:IllegalAccessException。但是对final字段进行set方法赋值时,尽管方法正常调用,但是并不会改变fianl字段的值。

  5. 如果字段为final static 类型,那么进行set方法赋值时,总会抛出IllegalAccessException异常。

关于反射可以做什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

反射可以做什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java反射能做什么

本篇内容主要讲解“Java反射能做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java反射能做什么”吧!一、 什么是反射?用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全
2023-06-17

Python可以做什么?

Python可以做什么?1)网站后端程序员:使用它单间网站,后台服务比较容易维护。如:Gmail、Youtube、知乎、豆瓣 2)自动化运维:自动化处理大量的运维任务3)数据分析师:快速开发快速验证,分析数据得到结果4)游戏开发者:一般是作
2023-01-31

dedecms可以做什么

Dedecms是一个功能强大且灵活的内容管理系统,可以用于搭建各种类型的网站:1、新闻门户网站,提供了完善的新闻发布和管理功能;2、企业网站;3、电子商务网站;4、博客和个人网站;5、论坛社区;6、用于搭建学校、培训机构等教育机构的官方网站
2023-08-03

java可以做什么?

正在准备入行IT,入行java的同学可能对java的应用有些疑虑,java可以做什么?下面本篇文章就来给大家介绍一下,希望对大家有所帮助。java可以做什么?1、大数据开发大数据领域是近年来常谈的领域,现在社会是一个高速发展的社会,科技发达、生活方便特别是在信
java可以做什么?
2016-01-14

pycharm可以做什么

pycharm 是一款功能强大的 python 开发环境 (ide),提供全面的工具和功能,简化 python 应用程序的开发。其核心功能包括:代码编辑器:语法高亮、自动补全、代码折叠和可自定义配色方案。调试器:交互式调试器,支持断点、单步
pycharm可以做什么
2024-04-25

golang可变参数是否可以用于反射?

go语言中,可变参数函数可通过“...运算符”声明,允许传递不定数量的参数,解决数据数量可变的情况。反射允许在运行时修改变量类型和值,可获取参数类型和值,实现函数的动态创建和调用。Go 语言中可变参数与反射的应用在 Go 语言中,可变参数
golang可变参数是否可以用于反射?
2024-04-29

学python可以做什么

这篇文章主要讲解了“学python可以做什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“学python可以做什么”吧!一、智能裁切图片在学习工作中我们都会遇到裁剪图片问题,想裁剪图片来保留
2023-06-27

C语言可以做什么

本篇内容主要讲解“C语言可以做什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言可以做什么”吧!C语言几乎是所有语言的实现基础,所以不存在做不了的事情,只是相对来说谁做更合适,编写游戏和软
2023-06-03

编程热搜

目录