ReflectionUtils 工具类

//Geeksun 2018.07.31
package com.geeksun.reflectionUtils;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class ReflectionUtils
{
	/**
	 * 通过反射,获得Class定义中声明的父类的泛型参数类型
	 * 如: public EmployeeDao extends BaseDao<Employee, String>
	 * @param clazz
	 * @return
	 */
	public static<T> Class<T> getSuperGenericType(Class clazz){
        return getSuperClassGenricType(clazz, 0);
    }
	/**
	 * 通过反射, 获得定义 Class 时声明的父类的泛型参数的类型
     * 如: public EmployeeDao extends BaseDao<Employee, String>
	 * @param clazz
	 * @param index
	 * @return
	 */
	public static Class getSuperClassGenricType(Class clazz,int index)
	{
		Type genType = clazz.getSuperclass();
		if(!(genType instanceof ParameterizedType))
		{
			return Object.class;
		}
        Type [] params = ((ParameterizedType)genType).getActualTypeArguments();
        if(index >= params.length || index < 0){
            return Object.class;
        }
        if(!(params[index] instanceof Class)){
            return Object.class;
        }
        return (Class) params[index];
	}
    /**
     * 循环向上转型, 获取对象的 DeclaredMethod
     * @param object
     * @param methodName
     * @param parameterTypes
     * @return
     */
	public static Field getDeclaredField(Object object,String fieldName)
	{
		Field field = null;
		Class<?> clazz = object.getClass();
		for(;clazz != Object.class;clazz = clazz.getSuperclass())
		{
			try
			{
				field = clazz.getDeclaredField(fieldName);
				return field;
			} catch (Exception e){}
		}
		return null;
	}
	public static void setFieldValue(Object object,String fieldName,Object value)
	{
		Field field = getDeclaredField(object, fieldName);
		field.setAccessible(true);
		try
		{
			field.set(object, value);
		} catch (IllegalArgumentException | IllegalAccessException e)
		{
			e.printStackTrace();
		}
	}
	public static Object getFieldValue(Object object,String fieldName)
	{
		Field field = getDeclaredField(object, fieldName);
		field.setAccessible(true);
		try
		{
			return field.get(object);
		} catch (IllegalArgumentException e)
		{
			e.printStackTrace();
		} catch (IllegalAccessException e)
		{
			e.printStackTrace();
		}
		return null;
	}
}

猜你喜欢

转载自blog.csdn.net/Geek_sun/article/details/81296214