以前写的些方法都是这样干的:
Class cls = Class.forName(“className”);
*** inst = cls.newInstance();
那样只能调用默认构造函数,也就是没有参数的,前几天要整个反射类,调用的是有参构造函数,解决如下:
Class cls = Class.forName(className);
Class[] paramTypes = { String.class, String.class, String.class,
String.class };
Object[] params = {bankCde, branchCde, buzDate, loanNo}; // 方法传入的参数
Constructor con = cls.getConstructor(paramTypes); //主要就是这句了 BatcherBase base = (BatcherBase) con.newInstance(params); //BatcherBase 为自定义类
注:BatcherBase 有构造函数如下
public BatcherBase(String bankCde, String branchCde, String buzDate,String loanNo)
------------------------------------------------------------------------------------------------------------
以前也写过一个测试的通用反射函数,只能调用无参构造的,贴出来,免得以后又忘了
//java反射机制的实现
public static JavaBeanExp converStr2ServerBean(String beanName, String fieldSetter, String paraValue){
JavaBeanExp base = null ;
try {
Class cls = Class.forName(beanName) ;
base = (JavaBeanExp)cls.newInstance() ;//获得该类的一个实例
Class[] paraTypes = new Class[]{String.class };
Method method = cls.getMethod(fieldSetter, paraTypes);
String[] paravalues = new String[]{paraValue} ;
method.invoke(base, paravalues);
} catch (Throwable e) {
System.err.println(e);
}
return base;
}
public static void main(String[] args) {
JavaBeanExp bean = (JavaBeanExp)ClassGetter.converStr2ServerBean("com.test.reflect.JavaBeanExp", "setName", "徐徐");
//函数相当于执行了JavaBeanExp类的setName(“徐徐")函数,
System.out.println(bean.getName());
}