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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 聂斌 中级黑马   /  2013-3-25 18:18  /  2046 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 聂斌 于 2013-3-25 19:05 编辑

看张孝祥老师的视频25,,里面的一句话我有点疑问:

思考题:怎么得到数组中的元素类型?

老师说无法获取到,,,


但我认为是可以的,,下面是我的代码1

             String[] arr = new String[] {"admin"};

            
             Class arrClass = arr.getClass();
             Class componentType = arrClass.getComponentType();
             if (componentType != null) {
                System.out.println("ComponentType = " + componentType.getName());
             }
             else {
                     //如果这个类并不代表一个数组类,此getComponentType()方法返回null。
                     System.out.println("ComponentType is null");
             }

输出;ComponentType = java.lang.String


代码2:'
                  String [] a4 = new String[]{"a","b","c"};
                 Class c=a4.getClass();
                //判断        c是不是数组
                if (c.isArray()) {               

                         //判断        c数组的类型是不是string
                        if (c.getComponentType()==String.class) {
                                System.out.println(true);
                        }
                      //打印c字节码的名称

                      System.out.println(c.getComponentType().getName());
                }

输出:

true
java.lang.String



至于老师说的   Object[] a5 = new Object[]{"abx",22};,,a5.getClass()..getComponentType().getName()返回的是java.lang.Object

不知道我的理解是否正确,,,

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

8 个回复

倒序浏览
张老师说的是可以得到每个元素的类型,但是不能得到整个数组的准确的元素类型,如果是Object[] 里面可以存任意Object的子类.Object的子类何其多....
我如果是 Object[]{"a","b","c" }   你如何确定这个数组的类型就是Object?
回复 使用道具 举报
不是这样的,你获取的都是数组类型,即getComponentType()获取的是数组类型而非数组元素类型,具体看API文档上:返回表示数组组件类型的 Class。如果此类不表示数组类,则此方法返回 null。你后面补充的Ooject的例子返回的是Object而不是数组元素类型。具体的验证代码如下:
  1. public class Demo {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.        
  7.          Object[] a5 = new Object[]{"abx","sss"};
  8.          System.out.println(a5.getClass().getComponentType().getName());
  9.         }
  10. }
复制代码
这段代码Object的数组里面装的都是String类型,而运行的结果却是Object,所以所谓的得到了数组元素类型,只是大部分的时候数组元素类型和数组类型是一样的,而导致了误判。希望可以帮到你。
回复 使用道具 举报
李尧 发表于 2013-3-25 18:56
张老师说的是可以得到每个元素的类型,但是不能得到整个数组的准确的元素类型,如果是Object[] 里面可以存任 ...

整个数组的类型就是object,,不管数组里面放什么类型的元素,,数组的类型都是object,,
老师说的不能获取整个数组的类型,,,但是我通过查api看到getComponentType()方法可以获取数组的类型,,这个方法老师没讲,,,比如int[],,我想获取这个数组的类型,,通过getComponentType()就得到int,,,
回复 使用道具 举报
楼主V5!! 学习了
回复 使用道具 举报
黑马潘浩 发表于 2013-3-25 18:59
不是这样的,你获取的都是数组类型,即getComponentType()获取的是数组类型而非数组元素类型,具体看API文 ...

呵呵对的忽略了这个,,,老师说的是不能获取数组里面所有元素的类型,,,但是数组的类型是可以获取得到的
回复 使用道具 举报
李尧 高级黑马 2013-3-25 19:15:54
7#
经测试 楼主是正确的,向楼主学习.楼主v5.
回复 使用道具 举报
老师说是通过反射可以获取到数组中某个元素的类型,但是不能获取到这个数组的具体类型,注意这里,说的是具体类型,而你获得的是Object类型,而不是Object[]的类型,这两个还是有区别的。一般来说,任何引用数据类型都是Object类型的,所以你这里的数组也是Object类型的,但是并没有得到Object[]的类型。
所以,张老师还是没有说错的。你无法获取到Object[]这个数组类型,只能得到其中的某个元素的具体类型。
另外,需要说一点,就是我个人理解是通过getClass()这个方法才能得到具体的类型,不知道正确与否。

不过从你的问题中,我又学到了一种方法getComponentType(),谢谢楼主

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
聂斌 中级黑马 2013-3-25 21:12:34
9#
小黑黑 发表于 2013-3-25 19:46
老师说是通过反射可以获取到数组中某个元素的类型,但是不能获取到这个数组的具体类型,注意这里,说的是具 ...

呵呵大家一起努力
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马