当前位置: 代码迷 >> Java相关 >> invoke(new int[])运行时会不会把里面的数组拆开
  详细解决方案

invoke(new int[])运行时会不会把里面的数组拆开

热度:830   发布时间:2013-10-15 13:16:12.0
invoke(new int[])运行时会不会把里面的数组拆开
public static void test1() throws Exception{
        Class clazz = Class.forName("javaWeb.Person");
        Method method = clazz.getMethod("main", String [].class);
        method.invoke(null,(Object)new String[] {"aa","bb"});   
    }
    public static void test2() throws Exception{
        Class clazz = Class.forName("javaWeb.Person");
        Method method = clazz.getMethod("run", int [].class);
        method.invoke(null,new int[] {1,5});
    }
     上面两个函数中的invoke方法为什么new String[]前面要加一个(Object),而new int[]前面不用啊??
搜索更多相关的解决方案: Object  public  method  null  

----------------解决方案--------------------------------------------------------
有吗?
可以不加的啊
在参数前加类型是转型用的,object任意类型都可以,加和不加没有什么区别吧,不知道说的对不对
----------------解决方案--------------------------------------------------------
回复 2楼 java小蚂蚁
如果method.invoke(null,(Object)new String[] {"aa","bb"}); 中不加上那个(Object),编译后会出现参数个数不匹配错误,也就是说会把那个String数组拆开里面有两个字符串即编译器会认为传了两个参数,故要把它转成Object类型编译器就不会去把它拆开,但不知道为什么下面的int类型的就不用这样也能编译
----------------解决方案--------------------------------------------------------
回复 2楼 java小蚂蚁
我发现每次我在这里问问题都是你回答我,谢谢啊!!非常感谢!!
----------------解决方案--------------------------------------------------------
你的jdk版本是多少,我的不会啊,我的是6的。只是个警告而已。无所谓的。这个方法里的参数是可以任意型和个数的,一般不会出现你的问题,你看下是不是jdk的问题,
另外不客气。能帮到你很高兴
----------------解决方案--------------------------------------------------------
我的也是6的,会出现这个问题,我是看张孝祥老师的视频他是讲new String[]前面要加(Object),但不知道为什么int的就不加也能编译
----------------解决方案--------------------------------------------------------
我的6编译也没有报错
----------------解决方案--------------------------------------------------------
回复 7楼 ghjsmzy
如果我把(Object)去掉就会出现如下错误
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at JavaWeb.methodTest1.test1(methodTest1.java:15)
    at JavaWeb.methodTest1.main(methodTest1.java:9)
----------------解决方案--------------------------------------------------------
我查了一下觉得应该是int是基本类型转换成功,而String不是基本类型,在转换时出错了,而报wrong number of arguments错误,所以需要加(Object)做人工转换。
API中有这个方法的使用说明,其参数类型就是Object
invoke(Object obj, Object... args)
          Invokes the underlying method represented by this Method object, on the specified object with the specified parameters.

然后,你看一下这个连接,对你应该也有帮助http://wenwen.soso.com/z/q188672163.htm
----------------解决方案--------------------------------------------------------
回复 9楼 ghjsmzy
根据你说的让我觉得应该是invoke()接收的第一个参数是Object类型,String就已经是Object型,String[]就相当于一个Object类型的数组,编译时遇到数组就会把数组中的数据拆开来,因此里面就有2个数据就会出现个数不匹配,而int不是Object型,int[]才是Object型,传一个int[]即传一个Object,已经是Object型了就不会再拆了,所以也就是只传了一个参数,你觉得我这样理解有道理吗?
----------------解决方案--------------------------------------------------------
  相关解决方案