【Java】 反射(作用、常用API、框架中用到的反射、反射获取注解信息等)

反射

Java中的反射( java.lang.reflect )

Java反射是一种强大的工具,它允许程序在运行时检查或反射自身并操作内部属性、构造器、方法和字段。通过反射,可以在运行时动态地创建对象,调用对象的方法,访问和修改对象的字段。

主要作用
  • 在运行时获取类的信息
  • 在运行时构造类的实例
  • 在运行时获取类的字段信息并访问它们
  • 在运行时获取类的方法信息并调用它们
  • 在运行时获取类的构造器信息并使用它们创建新的对象
常用的反射API
  1. 获取Class对象

    • Class.forName(String className):通过类的全限定名获取Class对象。
    • Object.getClass():通过对象实例获取Class对象。
    • ClassName.class:直接通过类引用获取Class对象。
  2. 构造器操作

    • getConstructor(Class<?>... parameterTypes):获取指定参数类型的公共构造器。
    • newInstance(Object... initargs):创建新实例。
  3. 字段操作

    • getField(String name):获取指定名称的公共字段。
    • getDeclaredField(String name):获取指定名称的所有声明字段(包括私有)。
    • setAccessible(true):设置可访问性为true,允许访问私有字段。
    • get(Object obj) / set(Object obj, Object value):获取/设置字段值。
  4. 方法操作

    • getMethod(String name, Class<?>... parameterTypes):获取指定名称和参数类型的公共方法。
    • invoke(Object obj, Object... args):调用方法。
自己实际用到反射的地方

在实习期间,我参与了一个MES项目,其中某个模块包含一个名为“物料”的字段,该字段出现了15次,如物料1、物料2、…、物料15。为了对这些字段进行操作,它们对应的实体类中提供了各自的get和set方法。最初的操作涉及到对所有字段逐一处理,导致代码中出现了15层if语句嵌套。为了简化代码结构,我采用for循环动态生成方法名,并利用反射机制来调用相应的方法。此外,通过设置setAccessible(true)以优化反射操作的性能,从而使得代码更加简洁高效。

// 创建一个列表用于存放物料ID
List<Object> materialIds = new ArrayList<>();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值