专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

通过反射(类类型)创建类的实例,调用类的方法,设置类的属性

Bean工厂

package com.test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * Bean工厂
 */
public class BeanFactory {

    /**
     * 创建实例
     *
     * @param clazz
     * @return
     */
    public static Object newInstance(Class<?> clazz) {
        Object instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return instance;
    }

    /**
     * 方法调用
     *
     * @param obj
     * @param method
     * @param args
     * @return
     */
    public static Object invokeMethod(Object obj, Method method, Object... args) {
        Object result;
        try {
            method.setAccessible(true);
            result = method.invoke(obj, args);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return result;
    }

    /**
     * 设置成员变量值
     *
     * @param obj
     * @param field
     * @param value
     */
    public static void setField(Object obj, Field field, Object value) {
        try {
            field.setAccessible(true);
            field.set(obj, value);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

1、 method.setAccessible(true);
2、 field.setAccessible(true);

使私有的成员和方法可以访问

测试

package com.test;

public class Student {

    private int id;

    public int getId() {
        return id;
    }

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

}

package com.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test {

    public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException {

        Class cl = Class.forName("com.test.Student");  
        //获得Student类的类类型

        //通过类类型创建Student类的实例
        Student student= (Student) BeanFactory.newInstance(cl);

        //获得类中定义的属性
          Field[] beanFields = cl.getDeclaredFields();
          //遍历属性
          for (Field beanField : beanFields) {
              //设置属性,依赖注入的影子
            BeanFactory.setField(student, beanField, Integer(1));
          }
          System.out.println(student.getId());
//        
//      BeanFactory.setField(student, "name", "king");

       }

    private static Object Integer(int i) {
        // TODO Auto-generated method stub
        return i;
    }
}

文章永久链接:https://tech.souyunku.com/23681

未经允许不得转载:搜云库技术团队 » 通过反射(类类型)创建类的实例,调用类的方法,设置类的属性

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们