java反射之通過(guò)反射了解集合泛型的本質(zhì)(詳解)
本文接上文“java反射之方法反射的基本操作方法”,利用反射了解下java集合中泛型的本質(zhì)
1、初始化兩個(gè)集合,一個(gè)使用泛型,一個(gè)不使用
ArrayList list1 = new ArrayList(); ArrayList<String> list2 = new ArrayList<String>();
2、有定義類型可得在list2中添加int類型會(huì)報(bào)錯(cuò)
list2.add("Hello"); list2.add(20); //報(bào)錯(cuò)
3、獲取兩個(gè)對(duì)象的類類型進(jìn)行比較
Class c1 = list1.getClass(); Class c2 = list2.getClass(); System.out.println(c1 == c2);
通過(guò)c1==c2結(jié)果返回true,說(shuō)明編譯之后集合的泛型是去泛型化的,java中集合的泛型是為了防止錯(cuò)誤輸入的,只在編譯階段有效,繞過(guò)編譯就無(wú)效了
4、驗(yàn)證:通過(guò)方法的反射來(lái)繞過(guò)編譯
try { Method m = c2.getMethod("add", Object.class); m.invoke(list2,20); System.out.println(list2); } catch (Exception e) { e.printStackTrace(); }
5、輸出結(jié)果
6、完整代碼
package com.format.test; import java.lang.reflect.Method; import java.util.ArrayList; /** * Created by Format on 2017/6/4. */ public class Test2 { public static void main(String[] args) { ArrayList list1 = new ArrayList(); ArrayList<String> list2 = new ArrayList<String>(); list2.add("Hello"); // list2.add(20); //報(bào)錯(cuò) Class c1 = list1.getClass(); Class c2 = list2.getClass(); System.out.println(c1 == c2); /** * 反射操作都是編譯之后的操作 * c1==c2結(jié)果返回true,說(shuō)明編譯之后集合的泛型是去泛型化的 * java中集合的泛型是為了防止錯(cuò)誤輸入的,只在編譯階段有效,繞過(guò)編譯就無(wú)效了 * 驗(yàn)證:通過(guò)方法的反射來(lái)繞過(guò)編譯 */ try { Method m = c2.getMethod("add", Object.class); m.invoke(list2,20); System.out.println(list2); } catch (Exception e) { e.printStackTrace(); } } }
以上這篇java反射之通過(guò)反射了解集合泛型的本質(zhì)(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02通過(guò)Mybatis實(shí)現(xiàn)單表內(nèi)一對(duì)多的數(shù)據(jù)展示示例代碼
最近做項(xiàng)目遇到這樣的需求要求將表中的數(shù)據(jù),按照一級(jí)二級(jí)分類返回給前端json數(shù)據(jù),下面通過(guò)本文給大家分享通過(guò)Mybatis實(shí)現(xiàn)單表內(nèi)一對(duì)多的數(shù)據(jù)展示示例代碼,感興趣的朋友參考下吧2017-08-08Java 超詳細(xì)圖解集合框架的數(shù)據(jù)結(jié)構(gòu)
什么是集合框架呢?集合框架是為表示和操作集合而規(guī)定的一種統(tǒng)一的標(biāo)準(zhǔn)的體系結(jié)構(gòu)。最簡(jiǎn)單的集合如數(shù)組、列表和隊(duì)列等,任何集合框架一般包含:對(duì)外的接口、接口的實(shí)現(xiàn)和對(duì)集合運(yùn)算的算法2022-04-04java ThreadLocal線程局部變量常用方法使用場(chǎng)景示例詳解
這篇文章主要介紹了為大家java ThreadLocal線程局部變量常用方法使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的三種方法
有些時(shí)候我們需要在項(xiàng)目中展示PDF,所以我們可以將PDF轉(zhuǎn)為圖片,然后已圖片的方式展示,效果很好,Java使用各種技術(shù)將pdf轉(zhuǎn)換成圖片格式,并且內(nèi)容不失幀,本文給大家介紹了三種方法實(shí)現(xiàn)PDF轉(zhuǎn)圖片的案例,需要的朋友可以參考下2023-10-10