/**
* 反射工具类
*/
public class ReflectionUtil
{
/**
* 用于访问父类的私有成员
* @param object
* @param fieldName
* @return 对象
*/
public static Object getFieldValue(Object object, String fieldName)
{
try
{
final Field field = getNamedField(object.getClass(), fieldName);
if (field != null)
{
AccessController.doPrivileged(new PrivilegedAction<Object>()
{
public Object run()
{
field.setAccessible(true);
return null;
}
});
return field.get(object);
}
}
catch (Exception e)
{
//忽略所有异常
}
return null;
}
/**
* 通过反射获取静态成员的值
* @param classVar
* @param fieldName
* @return
* 静态成员的值
*
*/
@SuppressWarnings("unchecked")
public static Object getFieldValue(Class classVar, String fieldName)
{
try
{
final Field field = getNamedField(classVar, fieldName);
if (field != null)
{
AccessController.doPrivileged(new PrivilegedAction<Object>()
{
public Object run()
{
field.setAccessible(true);
return null;
}
});
return field.get(null);
}
}
catch (Exception e)
{
//忽略所有异常
}
return null;
}
/**
* 用于设置私有成员
* @param object
* @param fieldName
* @param value
*/
public static void setFieldValue(Object object, String fieldName,
Object value)
{
try
{
final Field field = getNamedField(object.getClass(), fieldName);
if (field != null)
{
AccessController.doPrivileged(new PrivilegedAction<Object>()
{
public Object run()
{
field.setAccessible(true);
return null;
}
});
field.set(object, value);
}
}
catch (Exception e)
{
//忽略所有异常
}
}
/**
* 用于设置指定类的私有成员
* @param object
* @param clazz
* @param fieldName
* @param value
*/
@SuppressWarnings("unchecked")
public static void setFieldValue(Object object, Class clazz,
String fieldName, Object value)
{
try
{
//只在本类中找
final Field field = clazz.getDeclaredField(fieldName);
if (field != null)
{
AccessController.doPrivileged(new PrivilegedAction<Object>()
{
public Object run()
{
field.setAccessible(true);
return null;
}
});
field.set(object, value);
}
}
catch (Exception e)
{
//忽略所有异常
}
}
/**
*
* @param clazz
* @param fieldName
* @return
*
* 返回一个类的成员
*/
@SuppressWarnings("unchecked")
private static Field getNamedField(Class clazz, String fieldName)
{
Field field = null;
try
{
field = clazz.getDeclaredField(fieldName);
}
catch (SecurityException e)
{
//忽略此异常
}
catch (NoSuchFieldException e)
{
//本类没有的话,就找父类的
Class superclass = clazz.getSuperclass();
if (superclass != null)
{
field = getNamedField(superclass, fieldName);
}
}
return field;
}
/**
* 调用对象的方法
* @param object
* @param methodName
* @param argtypes
* @param args
* @return Object
*/
@SuppressWarnings("unchecked")
public static Object invokeMethod(Object object, String methodName,
Class[] argtypes, Object... args)
{
final Method method = getNamedMethod(object.getClass(), methodName, argtypes);
if (method != null)
{
AccessController.doPrivileged(new PrivilegedAction<Object>()
{
public Object run()
{
method.setAccessible(true);
return null;
}
});
try
{
return method.invoke(object, args);
}
catch (IllegalArgumentException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
}
return null;
}
@SuppressWarnings("unchecked")
private static Method getNamedMethod(Class clazz, String methodName,
Class... args)
{
Method method = null;
try
{
method = clazz.getDeclaredMethod(methodName, args);
}
catch (SecurityException e)
{
//忽略此异常
}
catch (NoSuchMethodException e)
{
//本类没有的话,就找父类的
Class superclass = clazz.getSuperclass();
if (superclass != null)
{
method = getNamedMethod(superclass, methodName, args);
}
}
return method;
}
}
Java反射工具类
最新推荐文章于 2024-10-03 08:24:38 发布