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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 pengfangjava 于 2012-2-16 16:46 编辑

我是Java初学者,问大家个简单的问题

ArrayList<Integer> list = new ArrayList<Integer>();
在这个泛型为Integer的ArrayList中存放一个String类型的对象。
怎样才能做到呢,就是做到了,有什么应用价值呢?

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

8 个回复

倒序浏览
我也想知道,{:soso_e113:}
回复 使用道具 举报
public class insertStrToArray {
        public static void main(String[] args) throws Exception {
                ArrayList<Integer> list = new ArrayList<Integer>();
                Method methodAddString = list.getClass().getMethod("add", Object.class);
                methodAddString.invoke(list, "abc");
                System.out.println(list);
        }
}
这个可以通过反射的方式实现,因为泛型的作用层在编译时。而反射直接获得了add方法的字节码跳过编译层在运行时直接添加。这样就骗过了编译。
作用嘛,比如你得这个集合里存放int类型的数据,但是有及个别的地方需要添加其他类型的数据。就可以用上了!
回复 使用道具 举报
可以添加,但是只能在运行时添加。java中的泛型不像C#语言那样,java泛型只在编译时有效。在张老师的高新技术那里有讲到。
回复 使用道具 举报
是感觉是为了研究尝试,也为了能多了解多学习一些知识。。作用啊,当然是人感觉的,感觉是什么作用,应该就是什么作用吧。。呵呵。。我瞎想的啊。。你旁听就行了。
回复 使用道具 举报
通过反射 先获取到你那个集合的add方法 赋值给Method的对象 , 直接invoke就行了,做到了主要就是练习一下反射吧。
还有 java中List的泛型是后来才加上去的,因为从jvm内部支持泛型是一项很艰难甚至不可能的任务,只在编译器上认同了泛型,所以可以通过反射绕开编译器做到!
回复 使用道具 举报
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
彭嘉聪 黑马帝 2012-2-16 16:04:22
8#
其实这道题很简单,但是我也忘了,泛型其实是java在编译期中用于控制类型限定的一种技术,
记住是编译期,所以这道题是在运行期处理的
运行期就会取消泛型限定,所以利用反射可以传入任意对象参数。
回复 使用道具 举报
技术测试刘老师 发表于 2012-2-16 13:13
这位同学的问题我来解答,如果你问应用价值,我想你在面试的时候很多问题都是很基础问题,你觉得对于你的工作 ...

谢谢老师的指点,我会更努力的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马