import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class MyObject {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        int i = 666;
        Object obj = i;
        System.out.println(obj);
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        // 编译器会阻止
        // list.add(333);
        // 但泛型约束只存在于编译期,底层仍是Object,所以运行期可以往List存入任何类型的元素
        Method addMethod = list.getClass().getDeclaredMethod("add", Object.class);
        addMethod.invoke(list, 333);
        // 打印输出观察是否成功存入Integer(注意用Object接收)
        for (Object l : list) {
            System.out.println(l);
        }
    }
}
反编译后
//Class文件
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class MyObject {
    public MyObject() {
    }
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        int i = 666;
        Object obj = Integer.valueOf(i);
        System.out.println(obj);
        List<String> list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        Method addMethod = list.getClass().getDeclaredMethod("add", Object.class);
        addMethod.invoke(list, 333);
        Iterator var5 = list.iterator();
        while(var5.hasNext()) {
            Object l = var5.next();
            System.out.println(l);
        }
    }
}
                
        
      
        
      
评论区