A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 夏俊男 中级黑马   /  2014-12-6 13:49  /  1883 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//这个程序的目的,是判断传入的对象是不是数组,如果是数组,就遍历打印,如果不是就原样输出。
//但是总是报Exception in thread "main" java.lang.IllegalArgumentException: Argument is not an array;求解求解啊
import java.lang.reflect.Array;
public class PrintArray {
        public static void main(String[] args) {
                // 定义个功能,来个数组打印数组,来个基本变量就打印数值
                int[] a = new int[]{110, 112, 119};
                sop(a);
        }

        private static void sop(Object obj) {
                // 利用反射来判断,传入的类是什么类型
                Class clazz = obj.getClass();
                if (clazz.isArray()) {
                        // 是数组,取元素打印
                        int len = Array.getLength(clazz);// 关键还是数组类,为我们提供了方法
                        for (int i = 0; i < len; i++) {
                                System.out.print(Array.get(clazz, i) + " ");
                        }
                } else {
                        // 不是数组是变量,直接打印
                        System.out.println(obj);
                }
        }

}

10 个回复

倒序浏览
将类型改成引用对象呢,将int换成Integer,试试吧!!
回复 使用道具 举报
Rain2692 发表于 2014-12-6 13:55
将类型改成引用对象呢,将int换成Integer,试试吧!!

刚改了下,还是不可以,同样的错误
回复 使用道具 举报
错误:     int len = Array.getLength(clazz);// 关键还是数组类,为我们提供了方法   
正确:     int len = Array.getLength(obj);
错误:     System.out.print(Array.get(clazz, i) + " ");
正确:     System.out.print(Array.get(obj, i) + " ");
传入的是对象,不是字节码
回复 使用道具 举报
字节码可能是数组吗??clazz.isArray()这个肯定不对啊
回复 使用道具 举报 1 0
  1.   Class clazz = obj.getClass();
  2.            if (clazz.isArray()) {
  3.                    // 是数组,取元素打印
  4.                    int len = Array.getLength(obj);// 关键还是数组类,为我们提供了方法
  5.                    for (int i = 0; i < len; i++) {
  6.                            System.out.print(Array.get(obj, i) + " ");
  7.                    }
  8.            } else {
  9.                    // 不是数组是变量,直接打印
  10.                    System.out.println(obj);
复制代码
回复 使用道具 举报 1 0

你看看吧,你的代码已经改正了。。
回复 使用道具 举报
private static void sop(Object obj)   应该是JDK1.5的可变参数导致的吧  JVM认为只要不符合Object[] obj,就不是一个数组,而是单独的一个对象  所以出现Argument is not an array提示   

我也刚看到这里  老师演示的是个String[] str .
回复 使用道具 举报
眸眼前缘 发表于 2014-12-6 14:21
错误:     int len = Array.getLength(clazz);// 关键还是数组类,为我们提供了方法   
正确:     int le ...

对的,对的。问题终于解决了,太谢谢了
回复 使用道具 举报
学习了~~~~~~~~
回复 使用道具 举报

嗯,经过改正,终于不报错了。也理解了。太谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马