zoukankan      html  css  js  c++  java
  • JAVA反射机制--怎么不受泛型束缚给数组赋值

    在Java中,声明数组的时候我们经常会写泛型限制用户输入或者获取的数据。如:ArrayList<String> list = new ArrayList<>();

    String就是泛型。当我们调用  

    list.add();方法的时候,如果输入整型数据,编译就会报错。

    当我们引用其他大牛写的第三方Jar包,有时候和包中定义的数据类型不一样,这个时候就要用java的反射机制跳过编译阶段。

    		     ArrayList list = new ArrayList<>();
    		ArrayList<String> listStr = new ArrayList<>();
    		list.add("obj");
    		listStr.add("str");
    		//获得ArrayList的类类型
    		Class c1 = list.getClass();
    		Class c2= listStr.getClass();
    		//反射操作都是编译之后的操作
    		System.out.println(c1==c2);
    		//返回true.Java中限制输入的泛型只在编译时有效
    *Java反射机制可以无视泛型的原因就是因为泛型只在编译时生效

    然后我们就可以通过获取类中的add方法(

    Method method = c2.getMethod("add", Object.class);
    向list中插入值.在上面我们定义的泛型是String类型,但是在这我们插入

    20依旧会添加到listStr中。

    			Method method = c2.getMethod("add", Object.class);
    			Object obj = method.invoke(listStr, 20);
    			System.out.println(listStr.size());
    关于class中方法的参数以及怎么通过class.getMethod()获得不同类中的方法在javaapi中都可以查看,在我的源码中也都有实例。

    实例CODE:

  • 相关阅读:
    CCF CSP 201709-1 打酱油 (贪心)
    CCF CSP 201712-1 最小差值
    CCF CSP 201612-1 中间数
    CCF CSP 201609-1 最大波动
    CCF CSP 201604-1 折点计数
    CCF CSP 201512-1 数位之和
    CCF CSP 201509-1 数列分段
    CCF CSP 201503-1 图像旋转 (降维)
    CCF CSP 201412-1 门禁系统
    CCF CSP 201409-1 相邻数对
  • 原文地址:https://www.cnblogs.com/qwop/p/6637325.html
Copyright © 2011-2022 走看看