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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xwh1230 中级黑马   /  2014-7-27 22:28  /  1662 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象

7 个回复

倒序浏览
反射。。。
回复 使用道具 举报
赵顺超 来自手机 中级黑马 2014-7-27 22:40:41
藤椅
在编译时期需要写泛型,但是java中泛型会在运行时期去掉,产生的class类与泛型无关,所以,你用反射添加String元素即可
回复 使用道具 举报
赵顺超 发表于 2014-7-27 22:40
在编译时期需要写泛型,但是java中泛型会在运行时期去掉,产生的class类与泛型无关,所以,你用反射添加Str ...

泛型没理解好啊,理解有点难度
回复 使用道具 举报
你好吗 来自手机 中级黑马 2014-7-27 23:36:12
报纸
还没学到反射的飘过
回复 使用道具 举报
这道题太简单了,一行代码。list.getClass().getMethod("add",Object.class).invoke(list, "你想在这里写什么?");  
回复 使用道具 举报
package cn.itcast.collection;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;

//在这个泛型为Integer的ArrayList中存放一个String类型的对象。
public class reflectDemo {
//思路: 用反射跳过泛型,调用 ArrayList类中的add方法添加string
        public static void main(String[] args) throws SecurityException, NoSuchMethodException, Exception, IllegalAccessException, InvocationTargetException {
                 ArrayList<Integer> al = new ArrayList<Integer>();
                 String str = "旺财";
                Method m = al.getClass().getMethod("add", Object.class);// 得到add方法对象
                 m.invoke(al, str);
                 for(int x=0;x<al.size();x++){
                         System.out.println(al.get(x));
                 }

        }

}这道题很简单的,首先要知道泛型技术是编译时期的技术,在编译通过后,生成的类文件里面没有泛型的。                   我们跳过编译,用反射调用生成的类文件,中的方法,用里面的方法添加string类型的就ok了。这样就跳过泛型了。
              就两个知识点:反型    +    反射
回复 使用道具 举报
M单色调 来自手机 中级黑马 2014-7-28 05:26:41
8#
路过看看!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马