黑马程序员技术交流社区

标题: 求此题解法,没思路 [打印本页]

作者: xwh1230    时间: 2014-7-27 22:28
标题: 求此题解法,没思路
ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象

作者: fantacyleo    时间: 2014-7-27 22:37
反射。。。
作者: 赵顺超    时间: 2014-7-27 22:40
在编译时期需要写泛型,但是java中泛型会在运行时期去掉,产生的class类与泛型无关,所以,你用反射添加String元素即可
作者: xwh1230    时间: 2014-7-27 22:55
赵顺超 发表于 2014-7-27 22:40
在编译时期需要写泛型,但是java中泛型会在运行时期去掉,产生的class类与泛型无关,所以,你用反射添加Str ...

泛型没理解好啊,理解有点难度
作者: 你好吗    时间: 2014-7-27 23:36
还没学到反射的飘过
作者: 裤裆里的温柔、    时间: 2014-7-28 00:33
这道题太简单了,一行代码。list.getClass().getMethod("add",Object.class).invoke(list, "你想在这里写什么?");  
作者: java—family    时间: 2014-7-28 01:02
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
路过看看!




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