在javascrip中,可以通过eval(obj+".fuctionName()")动态邦定一个方法。然而在java中,如要实现这样的
机制,只有通过类的反射来实现。
下面一段代码利用反射机制,模拟eval动态绑定执行函数.
/*
* 创建日期 2007-5-28
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
import java.lang.reflect.*;
import java.math.*;
/**
本类模拟此机制,实现类方法的自动执行.
在下例中,object表示你要反射的类,funcName表示方法名,paraValue表示方法参数
形如 setValue(obj,getInfo,"10010")表示执行obj.getInfo("10010");取id为10010的有关信息。
*/
public class reflect {
public static void setValue(Object object,String funcName,String paraValue){
Method[] methods=object.getClass().getDeclaredMethods(); //取得所有方法数组
for(int i=0;i<methods.length;i++){ //循环方法,如果方法名与给定方法名参数同,则执行
if(methods[i].getName().indexOf(funcName)>0){
try {
if(paraValue==null) throw new Exception("ParameterNullPointer");
methods[i].invoke(object,new BigDecimal[]{new BigDecimal(paraValue)}); //动态邦定方法
System.out.println("*************execute Eval("+"object.Set"+funcName+"("+paraValue+")");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}