黑马程序员技术交流社区

标题: 关于Class类中的getMethod方法中的参数 [打印本页]

作者: 梁豹新    时间: 2012-6-19 12:39
标题: 关于Class类中的getMethod方法中的参数
package cn.itcast.day1;
import java.lang.reflect.Method;
public class ReflectMethodVoidParamerty {

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception {
                // TODO Auto-generated method stub
                String str="abc";
                Method methodLength=
Class.forName("java.lang.String").getMethod("length",void.class);               
Object len=methodLength.invoke(str);
System.out.println(len);
//如果有参数为int,getMethod方法中的第二个参数是int.class,为什么函数
//有参数时,getMethod方法中的第二个参数不能是 void.class 呢?

作者: 李文龙    时间: 2012-6-19 12:55
这个问题和函数的返回值是一样的,如 int f(int a,int b)这个方法的返回值类型为int ,void f(int a,int b) 表示这个方法的返回值为void ,也就是无返回值。需要不需要返回值由你的程序定义。
同理,有参数为int,自然就是int.class,有参数的时候你当然就不能用void.class了
作者: 耿鑫    时间: 2012-6-19 13:09
public Method getMethod(String name, Class<?>... parameterTypes)  第二个参数是个可变参数,你可以当成数组理解,就是new Class[]{},里边是你的参数,有参数里边填上就可以了,没有就是个空数组,里边不是返回类型,是你要调用的方法需要的参数,举个例子 public void addUser(String username, int age)  你调用的时候就应该这么写;
getMethod("addUser", new Class[]{String.class, int.class});

作者: 孙峰    时间: 2012-6-19 13:33
本帖最后由 孙峰 于 2012-6-19 13:36 编辑

         例子String 中有 charAt(int a)方法,意思是取出 a脚标的元素,  那么反射中取该方法就要用 Method  method=String.class.getMethod("charAt", int.class),这里第一个参数“charAt”是指你要获得的方法名。 第二个参数"int.class"是指你要获取的方法 : charAt()的参数。
     当获取的方法是一个空参数时,第二个就参考 可变参数里,写个空的  new Class[]{},就行,   要是多参的话就写;new Class[]{类型1.cass,类型2.class,类型3.class}




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