Java的反射机制!!Java高手请进! 通过一个方法名字符串,来调用该名字如何实现?例如,已知Class为Test,其中有方法setTax,参数为String tax; 怎么在程序中通过方法名及参数自动调用这个方法!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我们可以用 reflection 来做一些其它的事情,比如执行一个指定了名称的方法。下面的示例演示了这一操作:import java.lang.reflect.*;public class method2 { public int add(int a, int b) { return a + b; } public static void main(String args[]) { try { Class cls = Class.forName("method2"); Class partypes[] = new Class[2]; partypes[0] = Integer.TYPE; partypes[1] = Integer.TYPE; Method meth = cls.getMethod("add", partypes); method2 methobj = new method2(); Object arglist[] = new Object[2]; arglist[0] = new Integer(37); arglist[1] = new Integer(47); Object retobj = meth.invoke(methobj, arglist); Integer retval = (Integer) retobj; System.out.println(retval.intValue()); } catch (Throwable e) { System.err.println(e); } }} public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchFieldException { Test test = new Test(); Class clazz = Test.class; // 方法一:调用 setTax 方法 Method method = clazz.getMethod("setTax", String.class); method.invoke(test, "abc"); System.out.println(test.getTax()); // 方法二:直接给 private 属性 tax 赋值, // 不通过 set 方法,Hibernate 就是类似这样做的 Field field = clazz.getDeclaredField("tax"); field.setAccessible(true); field.set(test, "123"); System.out.println(test.getTax());}可恶的反射竟要抛出那么多的异常~~ 有关JFrame和JPanel的问题,请大家进来看一下 修女重逢 Java怎么不可以直接编译成真正的可执行文件呢? 在java中用什么控件来显示数据库? 有没有类似DBGird的控件? 怎样通过JNI的java端调试VC端dll中的函数 progressMonitor WIN98下怎么设置JDK环境变量? 关于XP风格的软件包包 菜鸟问题:写好的 applet 怎么运行!?! 怎么样将剪贴版中的图像画出来? 我想学习JAVA但不知道怎么学啊? 哪位高人有好办法能算出当前CPU最大支持工作线程数?????
public class method2 {
public int add(int a, int b) {
return a + b;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod("add", partypes);
method2 methobj = new method2();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = meth.invoke(methobj, arglist);
Integer retval = (Integer) retobj;
System.out.println(retval.intValue());
} catch (Throwable e) {
System.err.println(e);
}
}
}
NoSuchMethodException, IllegalArgumentException, IllegalAccessException,
InvocationTargetException, NoSuchFieldException {
Test test = new Test();
Class clazz = Test.class;
// 方法一:调用 setTax 方法
Method method = clazz.getMethod("setTax", String.class);
method.invoke(test, "abc");
System.out.println(test.getTax());
// 方法二:直接给 private 属性 tax 赋值,
// 不通过 set 方法,Hibernate 就是类似这样做的
Field field = clazz.getDeclaredField("tax");
field.setAccessible(true);
field.set(test, "123");
System.out.println(test.getTax());
}可恶的反射竟要抛出那么多的异常~~