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:

  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/qwop/p/6637325.html
Copyright © 2011-2022 走看看