反射工具类

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 16:40   51   0
package com.young.spring.v3.utils;


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

/**
 * 描述:反射工具类
 *
 * @author BluceYoung
 * @create 2020-07-13 10:04
 * B站:TeacherYoung凌风
 * www.teacheryoung.com
 */
public class ReflectUtils {

    /***
     * 调用某个类型对象的某个方法
     * @param clazz 类型
     * @param methodName 方法名
     * @param obj 对象
     * @return
     */
    public static Object invokeMethod(Class clazz,String methodName,Object obj){
        try {
            Method method = clazz.getDeclaredMethod(methodName);
            return method.invoke(obj);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 为对象的某个属性赋值
     * @param bean 对象
     * @param propertyName 属性名
     * @param value 属性值
     * @param clazz 对象类型
     */
    public static void setPropertyValue(Object bean, String propertyName, Object value, Class clazz) {
        try {
            Field field = clazz.getDeclaredField(propertyName);
            field.setAccessible(true);
            field.set(bean,value);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    /**
     * 使用无参构造器实例化一个类的对象
     * @param clazz 对象的类
     * @return
     */
    public static Object newInstanceByConstructor(Class clazz) {
        try {
            //获取无参构造器
            Constructor<?> constructor = clazz.getDeclaredConstructor();
            Object bean=null;
            bean=constructor.newInstance();
            return bean;
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取指定类的指定属性的类型
     * @param clazzName 类名
     * @param name 属性名
     * @return
     */
    public static Class<?> getTypeByFieldName(String clazzName, String name) {
        try {
            Class<?> clazz = Class.forName(clazzName);
            Field field = clazz.getDeclaredField(name);
            return field.getType();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取指定类的指定属性的类型
     * @param clazz 类
     * @param name 属性名
     * @return
     */
    public static Class<?> getTypeByFieldName(Class clazz, String name) {
        try {
            Field field = clazz.getDeclaredField(name);
            return field.getType();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP