黑马程序员技术交流社区

标题: 关于反射的问题 [打印本页]

作者: 381946250    时间: 2013-5-28 17:36
标题: 关于反射的问题
本帖最后由 381946250 于 2013-5-29 23:58 编辑

import java.lang.reflect.Field;
import java.lang.reflect.Method;
class MethodTest{
public static void main(String []args)throws Exception
{
   Sum s=new Sum();
   Class cla=s.getClass();
   Method method=cla.getMethod("getAdd",int.class);
   System.out.println(method.invoke(s,1,2,3));
}

}
class Sum{
public int getAdd(int ...args)
{
   int sum=0;
   for(int arg:args)
   {
    sum+=arg;
   }
   return sum;
}
}
不知道为什么编译的时候没有错误,但是在运行的时候出错总是说类型不兼容,对反射这部分理解的不好,请赐教。
作者: 画饼    时间: 2013-5-28 17:51
import java.lang.reflect.Field;
import java.lang.reflect.Method;
class Z{
public static void main(String []args)throws Exception
{
   Sum s=new Sum();
   Class cla=s.getClass();
   Method method=cla.getMethod("getAdd",int[].class);
   int[] is=new int[]{1,2,3};
   System.out.println(method.invoke(s,is));
}

}
class Sum{
public int getAdd(int ...args)
{
   int sum=0;
   for(int arg:args)
   {
    sum+=arg;
   }
   return sum;
}
}
作者: 画饼    时间: 2013-5-28 17:53
可变参数,可以传一个数组进去,会自动拆包。你那个错误是因为,可变参数不能直接用int的字节码!
作者: 袁梦希    时间: 2013-5-29 17:13
如果问题已经解决,请把帖子的类型改为已经解决,如果不会解决请看我的个性签名。
作者: 李润根    时间: 2013-5-29 17:41
1楼正解

public int getAdd(int ...args)
这个是可变参数

Method method=cla.getMethod("getAdd",int.class);
不能写成基本类型int.class,改成数组,试试吧




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