java基础之反射相关

博客展示了Java反射机制的应用。定义了Person类,通过ReflectTest类获取Person类的声明字段、方法和构造器,创建实例并调用方法赋值。还给出了给实例字段赋值的代码,利用反射机制根据字段名设置对应的值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.测试用Person类

package reflect;

/**
 * Created by Administrator on 2018/5/10.
 */
public class Person {
    private Integer id;
    private String name;
    private String address;

    public Person() {
    }

    public Person(Integer id, String name, String address) {
        this.id = id;
        this.name = name;
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2,Reflect测试类

import java.lang.reflect.*;
import java.util.Arrays;

/**
 * Created by Administrator on 2018/5/10.
 */
public class ReflectTest {
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
        Class<?> clazz=Person.class;//获取Person的Class
        Field[] field=clazz.getDeclaredFields();//获取声明字段
        Method[] methods=clazz.getDeclaredMethods();//获取声明方法
        Constructor constructors=clazz.getConstructor(new Class[]{});//构造器
         Object instance = constructors.newInstance(new Object[]{});//实例
        System.out.println(instance);

       for (Method m:methods){
        if (m.getName().startsWith("set")){
            System.out.println(m.getName());
            String filedName = m.getName().substring(3).toLowerCase();
            Field f = clazz.getDeclaredField(filedName);
            Class<?> fclass = f.getType();
            if(fclass==Integer.class){
                m.invoke(instance,new Object[]{1});
            }
            if (fclass==String.class&&filedName.equals("name")){
                m.invoke(instance,new Object[]{"张三"});
            }
            if (fclass==String.class && filedName.equals("address")){
                m.invoke(instance,new Object[]{"上海"});
            }
            // m.invoke(instance,new Object[]{1});
        }
       }
        System.out.println(instance.toString());
    }
}

3、运行结果

4、给实例的字段赋值

Class<?> clazz = reqObj.getClass();//需要检测的类
                Field[] fields=clazz.getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                if(fields[i].getName().equals(mapKey.toString()))
                {
                    fields[i].setAccessible(true); 
                    fields[i].set(reqObj,map.get(mapKey).toString()); //给实例对象的字段赋值
                }
                }
            }
        
                         
调用制定的方法

handlerBean.getClass().getMethod("handler", String.class, String.class).invoke(handlerBean, mqErrorLogDO.getMsgId(), mqErrorLogDO.getMessageContent());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值