这是我遇到的一个比较有难度的java笔试题,当时我只做出了大概,而且多处错漏,惭愧惭愧。
以下代码应该是正确的,已经测试通过:
import java.lang.reflect.Method;
public class ReflectTest {
/**
* 有难度的Java笔试题 已知类名、方法名,调用参数为 String数组,要求用反射机制写出调用过程代码
*/
public static Object doCall(String className,String methodName,String[] paras)throws Exception{
Object result = null;
//获得反射类对象:
Object obj = Class.forName(className).newInstance();
//获得方法列表:
Method[] methods = obj.getClass().getDeclaredMethods();
for(Method m:methods){
//判断方法名:
if(m.getName().equals(methodName)){
Class[] classArr = m.getParameterTypes();
boolean flag = false;
for(Class c:classArr){
//判断参数类型:
if(c.equals(paras.getClass())){
flag=true;
}
}
if(flag){
result = m.invoke(obj, new Object[]{paras});
}
}
}
return result;
}
public static void main(String[] args) throws Exception {
Object s = doCall("ReflectClass2","test01",new String[]{"para001","para002"});
System.out.println(s);
}
}
class ReflectClass2 {
public String test01(String[] abc){
for(String s:abc){
System.out.println(s);
}
return "return code";
}
}