黑马程序员技术交流社区

标题: 简单程序求解决,数组的反射,打印数组成员 [打印本页]

作者: kangxiaoning    时间: 2013-11-21 10:28
标题: 简单程序求解决,数组的反射,打印数组成员
运行结果为什么会显示非法参数异常,我的参数不是定义的Object么
sfsd
Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array
        at java.lang.reflect.Array.getLength(Native Method)
        at com.heima.test.aa.printSring(aa.java:27)
        at com.heima.test.aa.main(aa.java:13)


代码如下:

package com.heima.test;

import java.lang.reflect.Array;

public class aa
{

       
        public static void main(String[] args)
        {
                String []a4 = new String[]{"aa", "bb", "cc"};
                printSring("sfsd");
                printSring(a4);

        }

       
       

       
       
        public static void printSring(Object obj)
        {
                Class clazz = obj.getClass();
                if(clazz.isArray())
                {
                        int len = Array.getLength(clazz);
                        for(int i = 0; i < len; i++)
                        {
                                System.out.println(Array.get(clazz, i));
                        }
                }
                else
                {
                        System.out.println(obj);
                }
               
        }
}
作者: ysunday    时间: 2013-11-21 10:48
int len = Array.getLength(clazz);
这句有问题,clazz是一个Class类型的对象,是[Ljava.lang.String这个东西,当然不是数组,你要getLength是Obj,也就是你传进来的数组才行,Array.getLength(obj);
然后
    System.out.println(Array.get(clazz, i));
这句也有问题,clazz根本不是你传进来的数组,而是你得到的那个数组的.class文件,是[Ljava.lang.String,所以你要做的Array.get(obj,i)吧,

改了就行,别把.class跟你传进来的对象弄混啊
作者: kangxiaoning    时间: 2013-11-21 11:55
ysunday 发表于 2013-11-21 10:48
int len = Array.getLength(clazz);
这句有问题,clazz是一个Class类型的对象,是[Ljava.lang.String这个 ...

懂了谢谢了
作者: FFF    时间: 2013-11-21 18:10
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~




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