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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© a986875894 中级黑马   /  2014-11-17 23:48  /  1101 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天才看反射,看到一道这样的题 感觉很有意思 分享一下
例如ArrayList<Integer> al = new ArrayList();
想在al集合中存储字符串类型,但是已经被泛型限制为integer类型, 可以通过反射机制绕过泛型检查,反射真的好强大
具体步骤,拿到.class字节码文件,拿到add方法记忆可以啦
具体代码实现:
  1. import java.lang.reflect.InvocationTargetException;
  2. import java.lang.reflect.Method;
  3. import java.util.*;
  4. class ClassDemo
  5. {
  6.         public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
  7.         {
  8.                 ArrayList<Integer> al = new ArrayList<Integer>();
  9.                 Class c = al.getClass();//有对象 所以直接获取class文件
  10.                 Method m = c.getMethod("add", Object.class);// 拿到add方法,明确存入的是Obj类型的数据
  11.                 m.invoke(al, "Hello");//存储运行
  12.                 m.invoke(al, "java");
  13.                 System.out.println(al);//打印结果为HelloWorld
  14.                
  15.         }
  16. }
复制代码

这道题据说还是面试题  大神别喷 不会的兄弟看看

4 个回复

倒序浏览
受教了  1103班的兄弟一起加油,
回复 使用道具 举报
这个方法真心不错,我用过后都感觉任督二脉口开了,好涨知识啊
回复 使用道具 举报
这个我知道。看了张孝祥老师讲的。因为泛型只在编译的时候有用。在运行的时候是不带泛型的。所以,这个很好玩的。能这样搞!!!
回复 使用道具 举报
ls61532529 发表于 2014-11-17 23:51
这个方法真心不错,我用过后都感觉任督二脉口开了,好涨知识啊

我认得你  你是不是把 eclipse写错了内个小伙子
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马