当前位置: 代码迷 >> J2SE >> 请问一下Method.invoke方法
  详细解决方案

请问一下Method.invoke方法

热度:110   发布时间:2016-04-24 02:10:04.0
请教一下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
这句话最后在说什么
  相关解决方案