黑马程序员技术交流社区

标题: Method.invoke()方法参数的疑惑 [打印本页]

作者: 贾振凯    时间: 2013-3-27 15:30
标题: Method.invoke()方法参数的疑惑
本帖最后由 贾振凯 于 2013-3-27 19:47 编辑
  1. Person p =new Person("jzk",23);
  2.                 String name = "name";
  3.                 PropertyDescriptor pd = new  PropertyDescriptor(name,p.getClass());
  4.                 Method getName = pd.getReadMethod();
  5.                 Object retVal = getName.invoke(p,(Object[])null); //这个地方提示让我把null强制转型为Object[],为什么?
  6.                 System.out.println(retVal);;
复制代码

作者: itserious    时间: 2013-3-27 16:58
Person p =new Person("jzk",23);
        String name = "name";
        PropertyDescriptor pd = new  PropertyDescriptor(name,p.getClass());
        Method getName = pd.getReadMethod();
       // Object retVal = getName.invoke(p,(Object[])null); //这个地方提示让我把null强制转型为Object[],为什么?
        Object retVal = getName.invoke(p); //这里是读取数据,不需要加参数的。
                                                                        //getName.invoke(obj, args)这里的args是一个数组类型的参数,这是因为在JDK 1.5以前都是用一个数组来表示多个参数的,不过现在可以直接用可变参数了。
        
        System.out.println(retVal);;
作者: 贾振凯    时间: 2013-3-27 17:57
itserious 发表于 2013-3-27 16:58
Person p =new Person("jzk",23);
        String name = "name";
        PropertyDescriptor pd = new  P ...

哦...........是不是类似于可变参数接受了0个参数?
作者: itserious    时间: 2013-3-27 18:09
贾振凯 发表于 2013-3-27 17:57
哦...........是不是类似于可变参数接受了0个参数?

是可以这样理解,

如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。

如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。

作者: 冯超    时间: 2013-3-27 18:18
看看·············




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2