欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java反射之通過(guò)反射了解集合泛型的本質(zhì)(詳解)

 更新時(shí)間:2017年06月05日 08:24:22   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇java反射之通過(guò)反射了解集合泛型的本質(zhì)(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

本文接上文“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)文章

  • java類加載機(jī)制、類加載器、自定義類加載器的案例

    java類加載機(jī)制、類加載器、自定義類加載器的案例

    這篇文章主要介紹了java類加載機(jī)制、類加載器、自定義類加載器的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xià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ù)展示示例代碼

    通過(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-08
  • Java 超詳細(xì)圖解集合框架的數(shù)據(jù)結(jié)構(gòu)

    Java 超詳細(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-04
  • tk.mybatis擴(kuò)展通用接口使用詳解

    tk.mybatis擴(kuò)展通用接口使用詳解

    這篇文章主要介紹了tk.mybatis擴(kuò)展通用接口使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • java中Swing會(huì)奔跑的線程俠

    java中Swing會(huì)奔跑的線程俠

    本文通過(guò)代碼示例給大家詳細(xì)講解了java中Swing會(huì)奔跑的線程俠這個(gè)經(jīng)典的示例,有興趣的朋友學(xué)習(xí)下。
    2018-03-03
  • java ThreadLocal線程局部變量常用方法使用場(chǎng)景示例詳解

    java ThreadLocal線程局部變量常用方法使用場(chǎng)景示例詳解

    這篇文章主要介紹了為大家java ThreadLocal線程局部變量常用方法使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • JVM中的程序計(jì)數(shù)寄存器PC是什么詳解

    JVM中的程序計(jì)數(shù)寄存器PC是什么詳解

    這篇文章主要介紹了JVM中的程序計(jì)數(shù)寄存器PC原理分析,JVM中的程序計(jì)數(shù)寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存儲(chǔ)指令相關(guān)的現(xiàn)場(chǎng)信息
    2021-09-09
  • Java實(shí)現(xiàn)PDF轉(zhuǎn)圖片的三種方法

    Java實(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
  • Java程序命令行參數(shù)用法總結(jié)

    Java程序命令行參數(shù)用法總結(jié)

    這篇文章主要介紹了Java程序命令行參數(shù)用法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論