package com.amarsoft.app.base.util; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.List; import com.amarsoft.app.base.businessobject.BusinessObject; import com.amarsoft.awe.dw.ui.util.StringMatch; public class JavaMethodHelper { @SuppressWarnings({ "rawtypes", "unchecked" }) public static Object runStaticMethod(String function,BusinessObject parameterSet)throws Exception{ if(function==null) return null; int i1 = function.indexOf("("); int j = function.substring(0,i1).lastIndexOf(".");//获得(前的最后一个"." //获得类名 String className = function.substring(0, j); //如果类名没有. if(className.indexOf(".")==-1) className = "com.amarsoft.dict.als.manage." + className; //获得方法名 String methodName = function.substring(j+1, i1); function = StringMatch.getContent(function, "\\([\\w\\W]+?\\)"); String parameterString = function.substring(1, function.length()-1);//去除左右括号 String[] parameterValueArrary = parameterString.split("\\,"); Class[] parameterTypeArray = new Class[parameterValueArrary.length]; for(int i=0;i paraList=StringHelper.getParameterList(parameterArrary[i]); String paraName=paraList.get(0); String objectType = paraName.substring(0,paraName.lastIndexOf(".")); String attributeID = paraName.substring(paraName.lastIndexOf(".")+1); Object value=null; if(objectType.equals(businessObject.getBizClassName())){ if(!businessObject.containsAttribute(attributeID))continue; else value=businessObject.getObject(attributeID); } else{ BusinessObject subobject = businessObject.getBusinessObject(objectType); if(subobject==null) value=""; else{ if(!subobject.containsAttribute(attributeID)) value=""; else value=subobject.getObject(attributeID); } } if(value==null) value=""; parameterTypeArray[i] = value.getClass(); parameterValueArrary[i] =value; } else{//数字 if(parameterArrary[i].indexOf(".")>0){ parameterTypeArray[i] = Double.class; parameterValueArrary[i] =Double.parseDouble(parameterArrary[i]); } else{ parameterTypeArray[i] = Integer.class; parameterValueArrary[i] =Integer.parseInt(parameterArrary[i]); } } } //通过方法反射 Object result; Class c = Class.forName(className); Method m = c.getMethod(methodName, parameterTypeArray); Object object=c; if(!Modifier.isStatic(m.getModifiers())){ object=c.newInstance(); } if(m.getParameterTypes()==null || m.getParameterTypes().length==0) result = m.invoke(object); else result = m.invoke(object,(Object[])parameterValueArrary); return result; } }