TIP:只知道类名,要运用反射机制动态调用已知类名的方法
类结构:
-------form(package):CityQueryForm.java
-------test(package):Test.java
CityQueryForm.java:
package form;
import java.util.Hashtable;
public class CityQueryForm {
private String name = null;
public void setName(Hashtable ht)
{
this.name = (String) ht.get("name");
}
public String getName() {
return name;
}
}
Test.java:
package test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Hashtable;
public class Test {
private void getForm(Hashtable ht, String formName) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
//Class c = Class.forName(formName);
Object o = Class.forName(formName).newInstance(); // 指定类名的类对象
Class partypes[] = new Class[1];
partypes[0] = Hashtable.class; //setName方法需要的参数
Method ms = o.getClass().getMethod("setName", partypes); //得到指定方法名和参数的方法对象
Method mg = o.getClass().getMethod("getName", null);
ms.invoke(o, ht); //方法调用
String mg.invoke(o, null);
System.out.println(name);
}
public static void main(String[] args) throws ClassNotFoundException, SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
String formName = "form.CityQueryForm";
Hashtable ht = new Hashtable();
ht.put("name", "wuhan");
Test t = new Test();
t.getForm(ht,formName);
}
}
测试结果:
wuhan