核心代码:
通过路径反射获得该类,然后实例化该类。
注意:
参数个数不固定,所以参数类型argsClass 和参数值args 要用数组。
String className="com.XXX.TestEntity";String methodName="returnParam";Object[] args={"-1"};Class[] argsClass=newClass[1];
argsClass[0]=java.lang.Object.class;try{Class c=Class.forName(className);// 通过类名获得ClassObject obj= c.newInstance();// 实例化类Method methodReflect= obj.getClass().getMethod(methodName,
argsClass);// 反射获得方法String value=(String) methodReflect.invoke(obj, args);// 调用此方法System.out.println(value);}catch(Exception e){
e.printStackTrace();}
应用:
TestEntity.java
//publicclassTestEntity{privateString name;privateint age;publicvoidnoall(){System.out.println("测试方法--noall");}publicvoidparam(String s){System.out.println("测试方法--param:"+s);}publicStringreturnf(){System.out.println("测试方法--return :returnf");return"returnf";}publicStringreturnParam(Object value){if(StringUtils.isEmpty(String.valueOf(value))){return"";}else{String str=String.valueOf(value)+"returnParam";System.out.println("测试方法--param:"+String.valueOf(value)+"--return:"+str);return str;}}}
主应用main.java
try{Object obj=Class.forName("com.XXX.TestEntity").newInstance();Class c= obj.getClass();Method[] methods= c.getMethods();for(int i=0;i<methods.length;i++){Method method= methods[i];Class<?>[] paramType= method.getParameterTypes();String returnType=String.valueOf(method.getReturnType());if("void".equals(returnType)){System.out.println("循环:"+i+" 方法名:"+methods[i].getName()+" 方法参数类型:"+String.valueOf(paramType)+" 方法返回类型:"+String.valueOf(returnType));}else{Object return1=null;if(paramType.length>0){
return1= method.invoke(obj,"param");}else{
return1= method.invoke(obj);}System.out.println("循环:"+i+" 方法名:"+methods[i].getName()+" 方法参数类型:"+String.valueOf(paramType)+" 方法返回类型:"+String.valueOf(returnType)+" 方法返回值:"+String.valueOf(return1));}}}catch(Exception e){thrownewRuntimeException("创建对象失败", e);}