黑马程序员技术交流社区

标题: 一个泛型问题。。。 [打印本页]

作者: 放课后小朋友    时间: 2014-2-23 20:27
标题: 一个泛型问题。。。
一个泛型是Integer的list集合,怎样向其中存入String类型对象?

作者: 苏小惠    时间: 2014-2-23 20:32
个人认为不行,既然已经定义泛型为Integer类型,就无法再存放其他类型,否则编译无法通过。
作者: 何苦似梦离    时间: 2014-2-23 20:35
通过反射,先获取存储对象的对象的字节码,然后获取方法,再想怎么样就怎么样咯
作者: 长石    时间: 2014-2-23 20:35
java中的泛型的是给编译器看的   通过反射机制可以避开编译器   

运用反射调用集合的add方法就可添加其他类型的元素了
作者: zjf    时间: 2014-2-23 21:54
通过反射可以做到:

        ArrayList<Integer> array = new ArrayList<Integer>();                               
                                // 获取array的字节码文件对象
                                Class c = array.getClass();
                                //通过字节码对象获取它所表示的方法: add()方法,
                                //并更改接收对象为Object类,也就是可以接任意类型的对象啦
                                //并把add()方法赋与Method对象
                                Method m = c.getMethod("add", Object.class);
                                //Method对象就可以添加任意类型的内容进去啦
                                m.invoke(array, "hello");
                                m.invoke(array, "world");
作者: 毛羚杨    时间: 2014-2-23 22:11
我不给你写代码了 你先看看这个步骤,这个步骤你能理解了,当然不是死记硬背哦。
首先是一个集合,你先通过反射拿到集合的类文件,反射你应该知道吧,然后咱们可以通过这个反射拿到这个集合的add()方法,(编译之后的class文件是没有泛型的,这个是java泛型机制的一个特点)然后通过这个拿到的方法,用invoke直接将要添加的String 类型的字符串装入集合中 ,这样就能够实现通过反射来实现对集合的存储……
作者: 毛羚杨    时间: 2014-2-23 22:12
苏小惠 发表于 2014-2-23 20:32
个人认为不行,既然已经定义泛型为Integer类型,就无法再存放其他类型,否则编译无法通过。 ...

咱们可以通过反射机制呀 ,泛型是怎么来的 它是什么原理你可以好好的看看哦
作者: 苏小惠    时间: 2014-2-23 22:37
毛羚杨 发表于 2014-2-23 22:12
咱们可以通过反射机制呀 ,泛型是怎么来的 它是什么原理你可以好好的看看哦 ...

是哦,傻掉了,再补补去
作者: 毛羚杨    时间: 2014-2-23 22:51
苏小惠 发表于 2014-2-23 22:37
是哦,傻掉了,再补补去

同感 我也是经常出现这样的问题 哈哈  互相学习吗




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