概述
packageutil;importjava.lang.reflect.Method;importjava.net.URLClassLoader;importjava.util.Arrays;importjava.util.HashMap;importjava.util.Map;//动态执行方法,但是不能调用方法的方法//getparam_valueandetype():解析参数,分解为参数值和参数类型数组//runMethod_classname():传递类名,自动实例化执行方法//runMethod_classinstance():传递类实例,执行方法
public classEeflect {publicClass getClass(String classname) {//URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Class c = null;try{
c=Class.forName(classname);//c = classloader.loadClass(classname);
} catch(Exception e) {
e.printStackTrace();
}returnc;
}public Map getparam_valueandetype(String params) {//入参字符串,将其解析为参数class类型数组和参数值数组//params使用英文逗号隔开,使用:分隔参数类型和值,例如abcd,int 1,test,int:2,StringArrays:1、2、3
Object[] paramlist = new Object[]{};//存储变量值
Class[] classtype = new Class[]{};//存储变量类型
Map result= newHashMap();if (!params.equals("")) {//传递了参数params走这里
String[] paramslist_temp = params.split(",|,");int num =paramslist_temp.length;
paramlist= newObject[num];
classtype= newClass[num];for (int i = 0; i < num; i++) {
String[] param_type_value= paramslist_temp[i].toString().split(":");//判断参数是否有类型定义
if (param_type_value.length > 1) {
String param_type= param_type_value[0];
String param_value= param_type_value[1];if (param_type.equalsIgnoreCase("int")) {//System.out.println("value=" + param_value);
paramlist[i] =Integer.parseInt(param_value);
classtype[i]= int.class;
}else if (param_type.equalsIgnoreCase("string")) {
paramlist[i]=param_value;
}else if (param_type.equalsIgnoreCase("stringarrays")) {
paramlist[i]= param_value.split("、");
classtype[i]= String[].class;
}else{
System.out.println("变量类型不支持,目前只支持int强转,当前变量的类型为:" +param_type);returnresult;
}
}else{
paramlist[i]=paramslist_temp[i];
classtype[i]=paramslist_temp[i].getClass();
}
}
}
result.put("paramlist", paramlist);
result.put("classtype", classtype);returnresult;
}public boolean runMethod_classname(String classname, String methodname, String params) {//传递classname字符串,执行方法
boolean result = false;
Map paraminfo= this.getparam_valueandetype(params);if (paraminfo == null) {returnresult;
}
Object[] paramlist= (Object[]) paraminfo.get("paramlist");
Class[] classtype= (Class[]) paraminfo.get("classtype");
result=this.runMethod(classname, methodname, paramlist, classtype);returnresult;
}public boolean runMethod(String classname, String methodname, Object[] params, Class[] paramstype) {//通过类名获得类实例,去执行方法
boolean result = false;try{
Class c= this.getClass(classname);if (c != null) {
Object o=c.newInstance();
Method m=c.getMethod(methodname, paramstype);
m.invoke(o, params);
result= true;
}
}catch(Exception e) {
e.printStackTrace();
}returnresult;
}public boolean runMethod_classinstance(Object classinstance, String methodname, String params) {//传递class实例,执行方法
boolean result = false;
Map paraminfo= this.getparam_valueandetype(params);
Object[] paramlist= newObject[]{};
Class[] classtype= newClass[]{};if (paraminfo != null) {
paramlist= (Object[]) paraminfo.get("paramlist");
classtype= (Class[]) paraminfo.get("classtype");
}
result= this.runMethod_hasclass(classinstance, methodname, paramlist, classtype);//if(!result){//System.out.println("runMethod_classinstance失败了");//}
returnresult;
}public boolean runMethod_hasclass(Object classinstance, String methodname, Object[] params, Class[] paramstype) {//通过类实例,去执行它的方法
boolean result = false;try{
Class c=classinstance.getClass();
Method m=c.getMethod(methodname, paramstype);
m.invoke(classinstance, params);
result= true;
}catch(Exception e) {
e.printStackTrace();
}returnresult;
}public booleanrunMethod(String classname, String methodname, Object[] params) {boolean result = false;try{
Class paramlist[]= null;if (params != null) {// int len =params.length;
paramlist= newClass[len];for (int i = 0; i < len; ++i) {
paramlist[i]=params[i].getClass();if (paramlist[i].toString().equals("class java.lang.Integer")) {
paramlist[i]= int.class;
}
}
}
Class c= this.getClass(classname);if (c != null) {
Object o=c.newInstance();
Method m=c.getMethod(methodname, paramlist);
m.invoke(o, params);
result= true;
}
}catch(Exception e) {
e.printStackTrace();
}returnresult;
}
}
最后
以上就是清新羊为你收集整理的java 动态类名_Java反射、动态加载(将java类名、方法、方法参数当做参数传递,执行方法)...的全部内容,希望文章能够帮你解决java 动态类名_Java反射、动态加载(将java类名、方法、方法参数当做参数传递,执行方法)...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复