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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许云龙 中级黑马   /  2013-9-4 20:50  /  1475 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 许云龙 于 2013-9-5 09:31 编辑
  1. package mrzhang;
  2. /*
  3. 张孝祥老师数组反射视频中一个思考问题:如何获取数组中的元素类型

  4. 经过试验发现可以获取数组的类型,也可以获取数组中每个元素的类型

  5. 为什么张老师说没有办法获取,还是我题目理解错了?

  6. 请高手指点是什么没有办法获取?
  7. */
  8. import java.lang.reflect.Array;

  9. public class ReclectArray
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 String[] arr = {"a","b","c"};
  14.                 int[] a = new int[]{1,2,3,4};
  15.                 Object[] obj = new Object[]{"a",1,'a',1.11,true};
  16.                
  17.                 show(obj);
  18.                
  19.         }
  20.         public static void show(Object obj)
  21.         {
  22.                 Class clazz = obj.getClass();

  23.                 System.out.println("数组类型:"+clazz.getName());
  24.                
  25.                 int len = Array.getLength(obj);
  26.                
  27.                 for(int x = 0;x<len;x++)
  28.                 {
  29.                         Object o = Array.get(obj,x);
  30.                         System.out.println(o);
  31.                         System.out.println("元素类型:"+o.getClass().getName());        
  32.                         
  33.                 }
  34.         }
  35. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

5 个回复

倒序浏览
基本数据类型就木有办法获取,
你获取的是自动装箱后的Integer类型。
元素类型:java.lang.Integer
不信的话,你获取基本数据类型,试试??

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
月黑风高 发表于 2013-9-4 21:05
基本数据类型就木有办法获取,
你获取的是自动装箱后的Integer类型。
元素类型:java.lang.Integer
  1.                //亲,谢谢你的回答,但是你的答案我不满意 我跟你证明一下吧
  2.                 System.out.println(int[].class.getName()); //打印结果是 [I
  3.                 System.out.println(Integer[].class.getName());//打印结果是 [Ljava.lang.Integer
  4.                 //首先通过以上这两个打印结果是可以判断是否是基本数据类型的
  5.                 //其次object数组中装的都是对象,基本数据类型到了里面自然变成基本数据类型的包装类
复制代码
回复 使用道具 举报

所以张老师说无法获取数组元素的类型,很对呀,就是因为int类型数组中元素是int类型,而通过反射获取得到的是integer类型
你想要的是这个答案,不是吗?
回复 使用道具 举报
月黑风高 发表于 2013-9-4 22:32
所以张老师说无法获取数组元素的类型,很对呀,就是因为int类型数组中元素是int类型,而通过反射获取得到 ...

数组类型都确定了,还不可以确定元素类型吗?
我这个例子程序里面有int型数组你自己调用show方法看看结果
我这个例子程序里面有Integer型数组你自己调用show方法看看结果

两个结果是不一样的,虽然通过反射获取到的元素类型都是Integer,但是数组类型是不相同的

一个是 数组类型:[I     说明是数组是int类型,数组中的元素也是int类型
一个是数组类型:[Ljava.lang.Integer;   说明数组是Integer类型,数组中的元素也是Integer类型



回复 使用道具 举报
我的天啊,我知道你能通过获取数组的类型,来推导出数组中元素的类型但是无法通过反射直接获取到。
前者是你头脑中思考的过程,不是通过运行程序得到的!
(1)System.out.println(Integer.class.getName());//java.lang.Integer
(2)System.out.println(int[].class.getName());//[I
(3)System.out.println(int.class.getName());//int


我们在通过反射遍历数组中的元素,来获取其中元素的类型时,
只能实现类似(1)(2)两种情况,不能实现(3),得到int类型,明白木有?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马