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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© XinWen 中级黑马   /  2014-5-4 16:01  /  997 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public static void arrayReflect(Object pObject) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
  2.                 if(pObject.getClass().isArray()){
  3.                         Field _Len = pObject.getClass().getDeclaredField("length");
  4.                         _Len.setAccessible(true);
  5.                         System.out.println(_Len.get(pObject));
  6.                 }else{
  7.                         System.out.println(pObject);
  8.                 }
  9.         }
复制代码
我不按 张老师 说的那样对 数组进行反射,而是 直接 找到, 数组中的 length 字段, 可是 运行时 出错,找不到这个 字段,请问大家 这是为什么

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 及时设置提问结束

查看全部评分

2 个回复

倒序浏览
Field _Len = pObject.getClass().getDeclaredField("length");
_Len.setAccessible(true);
System.out.println(_Len.get(pObject));
红色的代码:如果说你这pObject是数组那么 pObject.getClass()获得是这个数组类型的字节码文件, boolean isArray()
          判定此 Class 对象是否表示一个数组类。
是class的方法这是允许的,而你通过对字节码文件暴力反射取到length这个parameter变量,是不允许的!(你这句话的意思是取这个字节码的length成员,而不是数组的成员length)
应该通过Array.getLength(pObject)取得这个数组对象的length!
如果你偏要这么做  你要重写个数组类继承java.util.Arrays  !并且增加一个length变量!

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
ò壞尛孩 发表于 2014-5-4 16:52
Field _Len = pObject.getClass().getDeclaredField("length");
_Len.setAccessible(true);
System.out.pri ...

感谢 回答   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马