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