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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Kevin.Kang 于 2015-8-12 14:43 编辑

有一个ArrayList<Integer>的对象,如果想要添加一个String类型的元素,可以使用反射。泛型只作用于代码的编译时期,而且此时add()方法的源码,参数是任意类型,并不是泛型。利用反射可以跳过泛型的检查,调用add()方法,直接添加到集合中去。

  1. package com.kxg_04;

  2. import java.lang.reflect.Constructor;
  3. import java.lang.reflect.Method;
  4. import java.util.ArrayList;

  5. public class ArrayListDemo {
  6.         public static void main(String[] args) throws Exception {
  7.                 ArrayList<Integer> al = new ArrayList<Integer>();

  8.                 // 得到al对象的字节码文件对象
  9.                 Class c = al.getClass();

  10.                 // 获取构造方法
  11.                 Constructor con = c.getConstructor();

  12.                 // 通过构造方法创建对象
  13.                 Object obj = con.newInstance();

  14.                 // 通过字节码对象获取add()方法
  15.                 Method m = c.getMethod("add", Object.class);

  16.                 // 调用add()方法添加String类型元素
  17.                 m.invoke(al, "跳过泛型添加元素");
  18.                 System.out.println(al);
  19.         }
  20. }
复制代码


1 个回复

倒序浏览
赞一个,楼主写的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马