1.调用构造函数的例子
/**
* Invoke a constructor on a class using
reflection.
*
* @param klass The class.
* @param classes
The classes in the parameter list.
* @param objects The objects to be
used as parameters.
* @return The object constructed.
*/
public static Object invokeConstructor(final Class klass, final
Class[] classes, final Object[] objects) {
try
{
Constructor constructor;
try
{
constructor =
klass.getDeclaredConstructor(classes);
}
catch
(NoSuchMethodException e) {
constructor =
klass.getConstructor(classes);
}
constructor.setAccessible(true);
return
constructor.newInstance(objects);
}
catch
(NoSuchMethodException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(InstantiationException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(IllegalAccessException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(InvocationTargetException e) {
throw new
RuntimeException(e.getTargetException().getMessage());
}
}
2.调用域的例子
/**
* Get the value of an instance field on an object using reflection.
*
* @param instance The instance of the object.
* @param
fieldName The name of the field.
* @return The object returned by
getting the field.
*/
public static Object
invokeGetInstanceField(final Object instance, final String fieldName)
{
try {
Field field;
try
{
field =
instance.getClass().getField(fieldName);
}
catch
(NoSuchFieldException e) {
field =
instance.getClass().getDeclaredField(fieldName);
}
field.setAccessible(true);
return
field.get(instance);
}
catch (NoSuchFieldException e)
{
throw new
RuntimeException(e.getMessage());
}
catch
(IllegalAccessException e) {
throw new
RuntimeException(e.getMessage());
}
}
3.调用类方法的例子
/**
* Invoke an instance method on an object using reflection.
*
*
@param instance The instance of the object.
* @param methodName The name
of the method.
* @param classes The classes in the parameter
list.
* @param objects The objects to be used as parameters.
*
@return The object returned by invoking the method.
*/
public
static Object invokeInstanceMethod(
final Object instance, final
String methodName, final Class[] classes, final Object[] objects)
{
try {
Method method;
try
{
method = instance.getClass().getDeclaredMethod(methodName,
classes);
}
catch (NoSuchMethodException e)
{
method = instance.getClass().getMethod(methodName,
classes);
}
method.setAccessible(true);
return
method.invoke(instance, objects);
}
catch
(NoSuchMethodException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(IllegalAccessException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(InvocationTargetException e) {
throw new
RuntimeException(e.getTargetException().getMessage());
}
}
4.调用静态方法的例子
/**
* Invoke a static method on a class using reflection.
*
* @param
klass The class.
* @param methodName The name of the method.
*
@param classes The classes in the parameter list.
* @param objects The
objects to be used as parameters.
* @return The object returned by
invoking the method.
*/
public static Object
invokeStaticMethod(
final Class klass, final String methodName,
final Class[] classes, final Object[] objects) {
try
{
Method method;
try {
method =
klass.getDeclaredMethod(methodName,
classes);
}
catch (NoSuchMethodException e)
{
method = klass.getMethod(methodName,
classes);
}
method.setAccessible(true);
return
method.invoke(klass, objects);
}
catch
(NoSuchMethodException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(IllegalAccessException e) {
throw new
RuntimeException(e.getMessage());
}
catch
(InvocationTargetException e) {
throw new
RuntimeException(e.getTargetException().getMessage());
}
}