只有得到方法的名称和参数才能唯一决定方法
class A{
public void print(){
System.out.println("Hello CSDN!");
}
public void print(int a, int b){
System.out.println(a+b);
}
public void print(String a, String b){
System.out.println(a.toUpperCase()+","+b.toLowerCase());
}
}
已知有一个类A,A中三个不同参数的print方法,如何采用反射机制调用print方法呢?
1、先获取A的类类型,因为类类型有A类中的全部信息。
A a= new A();
Class c= a.getClass();
2、调用Class.getMethod()方法,获取方法对象,这一步需要知道该方法的名称和参数。此处若找不到方法会抛出NoSuchMethodException异常
Method m1 = c.getMethod("print",new Class[]{int.class,int.class});//获取第二个print方法
Method m2= c.getMethod("print",int.class,int.class);//获取第二个print方法
// m1==m2
3、调用方法。使用Method.invoke(Object obj, Object… args) 此处若参数不对或对象不对,则会抛出IllegalAccessException或InvocationTargetException异常
//如果方法有返回值, 返回返回值; 如果没有,则返回NULL
Object o1 = m1.invoke(a,10,20);
Object o2=m1.invoke(a,new Object[]{10,20});
//o1==o2
注:若要实现获取第一个print方法(无参方法),则可以使用以下形式
Method m1 = c.getMethod("print",new Class[]{});
//Method m2 = c.getMethod("print");
Object o1 = m1.invoke(a,new Object[]{});
//Object o1 = m1.invoke(a);
以上大部分内容来源于慕课网的”反射——Java高级开发必须懂的”课程,网址是http://www.imooc.com/learn/199,感谢Cedar老师的辛勤付出!