• 通过反射了解集合泛型的本质


    通过反射了解集合泛型的本质
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    /**
     * 通过反射了解集合泛型的本质
     * @author shm
     *
     */
    public class MethodDemo02 {
    	public static void main(String[] args) {
    		ArrayList list = new ArrayList();
    		list.add("hello");
    		list.add(20);
    		
    		ArrayList<String> list1 = new ArrayList<String>();
    		list1.add("hello");
    		//list1.add(20);//这个加入是错误的:The method add(int, String) in the type ArrayList<String> is not applicable for the arguments (int)
    	
    		Class c1 = list.getClass();
    		Class c2 = list1.getClass();
    		System.out.println(c1==c2);
    		//反射的操作都是编译后的操作
    		
    		/**
    		 * c1=c2结果返回TRUE说明编译后集合的泛型是去泛型化的
    		 * java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译后就无效了
    		 * 验证:我们可以通过反射操作来绕过编译
    		 */
    		try {
    			Method method = c2.getMethod("add", Object.class);
    			method.invoke(list1, 20);
    			System.out.println(list1);
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    		
    		
    	}
    }
  • 相关阅读:
    angularjs 判断是否包含 permIDs|filter:'10'
    js日期格式化
    JSON格式检验
    CodeSmith Generator 6.5
    Hosts文件说明
    正则表达式匹配换行实例代码
    Codeforces 311E Biologist
    URAL 1349 Farm
    [SDOI2015] 序列统计
    洛谷 P3803 多项式乘法
  • 原文地址:https://www.cnblogs.com/bsyx/p/7107459.html
Copyright © 2020-2023  润新知