日期:2014-05-20  浏览次数:20681 次

请教一下Method.invoke方法
java.lang.reflect.Method
public Object invoke(Object obj,Object... args)
参数:
obj - 从中调用底层方法的对象
args - 用于方法调用的参数 
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果 

我想问一下这个方法到底是什么意思 比方说 methodObj.invoke(Object obj,Object...args) 
我知道methodObj是一个Method类型的对象 其实就相当于某个类的一个方法 到底args是这个方法的参数 还是这个方法是args里定义的一个方法

我看Core java 7th里的例子感觉有些不太明白
P195:
invoke方法的签名是:
Object invoke(Object obj,Object...args)
...
对于静态方法,第一个参数可以被忽略,即可以将它设置为null
例如,假设用mI代表Employee类的getName方法,下面这条语句显示了调用这个方法的格式:
String n=(String)m1.invoke(harry);
...
例如,假设m2代表Employee类的getSalary方法,那么返回的实际类型是Double,因此必须相应的进行类型转换。
double s=(Double)m2.invoke(harry);
=======================================
这里的harry是一个Employee类型的对象 Employee harry=new Employee("Harry Hacker",35000,10,1,1989);
这样看上去String n=(String)m1.invoke(harry);相当于调用harry.getName()

然后再看P196页的例子
Java code
import java.lang.reflect.*;
public class MethodPointerTest {
    public static void main(String[] args)throws Exception{
        Method square=MethodPointerTest.class.getMethod("square", double.class);
        Method sqrt=Math.class.getMethod("sqrt", double.class);
        printTable(1,10,10,square);
        printTable(1,10,10,sqrt);
    }
    public  static double square(double x){
        return x*x;
    }
    public static void printTable(double from,double to,int n,Method f){
        System.out.println(f);
        double dx=(to-from)/(n-1);
        for (double x=from;x<=to;x+=dx){
            try{
                double y=(Double)f.invoke(null, x);
                                [color=#FF0000]//我不能明白的就是这里了 这里相当于调用square(x) 而前面的例子的格式是x.square[/color]
                System.out.printf("%10.4f|%10.4f%n",x,y);
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

麻烦用通俗语言教我一下2个参数和返回结果都是什么东西 谢谢

------解决方案--------------------
没有看明白
//我不能明白的就是这里了 这里相当于调用square(x) 而前面的例子的格式是x.square
这句话最后在说什么