Java反射工具类 (一)

2014-11-24 03:14:16 · 作者: · 浏览: 0

Java的反射无疑会让你的代码更加灵活,设计更加多变,耦合性更低,能够写出更漂亮的代码。废话不多说,直接贴出个人写的工具类,应该比较实用。

package com.epoint.utility.code;

import java.lang.reflect.Constructor;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.List;

/**

* 反射工具类

*

* @author komojoemary

* @version [版本号, 2010-3-16]

*/

public class ReflectUtil

{

/**

* 按照类名反射出它的一个对象

*

* @param classname

* 包名+类名

* @return Object

*/

@SuppressWarnings("rawtypes")

public static Object getObjByClassName(String classname) {

Object obj = null;

if (classname != null) {

try {

Class a = Class.forName(classname);

obj = a.newInstance();

}

catch (InstantiationException e) {

e.printStackTrace();

}

catch (IllegalAccessException e) {

e.printStackTrace();

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

return obj;

}

/**

* 按照类名,参数值反射出它的一个对象

*

* @param classname

* 包名+类名

* @param parameter

* 构造函数的参数值

* @return Object

*/

@SuppressWarnings({"unchecked", "rawtypes" })

public static Object getObjByClassNameAndParameter(String classname, Object[] parameter) {

Object obj = null;

if (classname != null) {

try {

Class a = Class.forName(classname);

// 获取公有的构造函数,指定参数

Constructor con = a.getConstructor(getParameterClass(parameter));

obj = con.newInstance(parameter);

}

catch (IllegalArgumentException e) {

e.printStackTrace();

}

catch (InstantiationException e) {

e.printStackTrace();

}

catch (IllegalAccessException e) {

e.printStackTrace();

}

catch (InvocationTargetException e) {

e.printStackTrace();

}

catch (SecurityException e) {

e.printStackTrace();

}

catch (NoSuchMethodException e) {

e.printStackTrace();

}

catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

return obj;

}

/**

* 用类名反射调用它的某个方法(一般针对工具类或者service)(无参数)

*

* @param className

* 类名

* @param methodName

* 方法名

* @return Object

*/

public static Object invokeMethod(String className, String methodName) {

return invokeMethodWithObjHasParame(className, getObjByClassName(className), methodName, new Object[0]);

}

/**

* 用类名反射调用它的某个方法(一般针对工具类或者service)(有参数)

*

* @param className

* 类名

* @param methodName

* 方法名

* @param parameter

* 参数数组

* @return Object

*/

public static Object invokeMethodHasParame(String className, String methodName, Object[] parameter) {

return invokeMethodWithObjHasParame(className, getObjByClassName(