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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 放课后小朋友 中级黑马   /  2014-2-23 20:27  /  1241 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个泛型是Integer的list集合,怎样向其中存入String类型对象?

评分

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

查看全部评分

8 个回复

倒序浏览
个人认为不行,既然已经定义泛型为Integer类型,就无法再存放其他类型,否则编译无法通过。
回复 使用道具 举报 0 1
通过反射,先获取存储对象的对象的字节码,然后获取方法,再想怎么样就怎么样咯
回复 使用道具 举报 1 0
java中的泛型的是给编译器看的   通过反射机制可以避开编译器   

运用反射调用集合的add方法就可添加其他类型的元素了

评分

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

查看全部评分

回复 使用道具 举报 1 0
通过反射可以做到:

        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");

评分

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

查看全部评分

回复 使用道具 举报 1 0
我不给你写代码了 你先看看这个步骤,这个步骤你能理解了,当然不是死记硬背哦。
首先是一个集合,你先通过反射拿到集合的类文件,反射你应该知道吧,然后咱们可以通过这个反射拿到这个集合的add()方法,(编译之后的class文件是没有泛型的,这个是java泛型机制的一个特点)然后通过这个拿到的方法,用invoke直接将要添加的String 类型的字符串装入集合中 ,这样就能够实现通过反射来实现对集合的存储……

评分

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

查看全部评分

回复 使用道具 举报
苏小惠 发表于 2014-2-23 20:32
个人认为不行,既然已经定义泛型为Integer类型,就无法再存放其他类型,否则编译无法通过。 ...

咱们可以通过反射机制呀 ,泛型是怎么来的 它是什么原理你可以好好的看看哦
回复 使用道具 举报 1 0
毛羚杨 发表于 2014-2-23 22:12
咱们可以通过反射机制呀 ,泛型是怎么来的 它是什么原理你可以好好的看看哦 ...

是哦,傻掉了,再补补去
回复 使用道具 举报
苏小惠 发表于 2014-2-23 22:37
是哦,傻掉了,再补补去

同感 我也是经常出现这样的问题 哈哈  互相学习吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马