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