关于下面的invoke()方法,有错误,请指正import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestReflection { public static void main(String[] args) {
String s = "T";
Class c = null;
Object o = null;
Method[] methods = null;
try {
c = Class.forName(s);
 o = c.newInstance();
 methods = c.getMethods();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
for(Method m :methods) {
System.out.println(m.getName());
}

for(Method m :methods) {
if(m.getName().equals("mm"));
try {
m.invoke(o,1);
} catch (IllegalArgumentException e) {

e.printStackTrace();
} catch (IllegalAccessException e) {

e.printStackTrace();
} catch (InvocationTargetException e) {

e.printStackTrace();
}
}

}}class T{
public void m() {
System.out.println("m");
}

public void mm(int i) {
System.out.println(i+"mm");
}

public String say() {
return  "say";
}
}

解决方案 »

  1.   

    for (Method m : methods) {
    if (m.getName().equals("mm"))
    ;
    try {
    m.invoke(o, 1);
    } catch (IllegalArgumentException e) { e.printStackTrace();
    } catch (IllegalAccessException e) { e.printStackTrace();
    } catch (InvocationTargetException e) { e.printStackTrace();
    }
    }
      

  2.   


    for (Method m : methods) {
    if (m.getName().equals("mm")) {
    try {
    m.invoke(o, 1);
    } catch (IllegalArgumentException e) { e.printStackTrace();
    } catch (IllegalAccessException e) { e.printStackTrace();
    } catch (InvocationTargetException e) { e.printStackTrace();
    }
    }

    }
      

  3.   

    参考下
    public class Student {
    private String name;
    private int score; public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    } public int getScore() {
    return score;
    }
    public void setScore(int score) {
    this.score = score;
    }
    public void disPlay() {
    System.out.println("name:" + name);
    System.out.println("score:" + score);
    }
    }public static void main(String[] args) {
    String className = "com.test.Student";
    try {
    Class c = Class.forName(className);
    Object object = c.newInstance(); Class[] param1 = {String.class};
    Method setName = c.getMethod("setName", param1);
    Object[] paramObj = {"Jim"};
    setName.invoke(object, paramObj); Class[] param2 = {int.class};
    Method setScore = c.getMethod("setScore", param2);
    Object[] paramObj3={80};
    setScore.invoke(object, paramObj3); Method disPlay = c.getMethod("disPlay", new Class[0]);
    disPlay.invoke(object, new Object[0]); } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InstantiationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }