中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當(dāng)前位置: 首頁 / 技術(shù)干貨 / 正文
民哥帶你快速精通java泛型(五)

2022-10-24

泛型 類型 定義

  第五關(guān) 泛型的離奇失蹤

  小伙們看到這個標(biāo)題,可能會大吃一驚,我們不是定義好泛型了嗎,那么泛型還會突然離奇失蹤啊。

  我可以很負(fù)責(zé)的告訴小伙們: 泛型確實會消失!

  1. 泛型的擦除機制(泛型消失)

好程序員

  我們定義的泛型類,泛型方法,只是編譯時:規(guī)范類型參數(shù)的傳遞,然而在編譯成class文件后,運行代碼時,這時泛型就消失了。

  原因就是:

  在JAVA的虛擬機中并不存在泛型,泛型只是為了完善java體系,增加程序員編程的便捷性以及安全性而創(chuàng)建的一種機制,在JAVA虛擬機中對應(yīng)泛型的都是確定的類型,在編寫泛型代碼后,java虛擬機中會把這些泛型參數(shù)類型都擦除,用相應(yīng)的確定類型來代替,代替的這一動作叫做類型擦除,而用于替代的類型稱為原始類型,在類型擦除過程中,一般使用第一個限定的類型來替換,若無限定,則使用Object.

  下面我們測試一下:

  //1.在Demo.java類中: 定義一個泛型的集合

  Listlist = new ArrayList();

  list.add("hello");

  list.add("java");

  //2.在編譯后的Demo.class文件中,通過反編譯查看:泛型消失了

  List list = new ArrayList();

  list.add("hello");

  list.add("java");

  2.泛型的擦除補償

  正如我們看到的,我們在代碼運行時,泛型就消失了,那么如果我們在運行代碼時需要確切的知道泛型的具體類型該怎么辦呢?特別是使用new T(),或者使用instanceof, 因為這兩類操作要知道確切的類型。

  我們可以通過泛型擦除后的補償來滿足我們的需求,一般我們會采用java中的設(shè)計模式來解決這個問題。

  方式一:簡單工廠 (最簡單)

  在此方法中,將類型作為參數(shù),以一個萬能的工廠類(其中有一個返回具體類型類的實例的泛型方法)用類的

  newInstance()方法返回參數(shù)化類型的實例,如下所示:

/**
* 定義泛型T
* @param <T>
*/
public class GenericDemo9<T> {
//1.定義泛型變量: t
private T t;
//2.定義方法:獲取t
public T getInstance(Class<T> clz){
try {
this.t = clz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return this.t;
}
//3.測試:
public static void main(String[] args) {
GenericDemo9<Date> gd = new GenericDemo9<Date>();
Date date = gd.getInstance(Date.class);
}

}

  缺點:

  因為class的newInstance()是利用無參構(gòu)造方法創(chuàng)建對象的,如果該泛型類沒有無參構(gòu)造方法,就會報錯

  方式二:工廠方法(最靈活)

  與簡單工廠相比,工廠方法更靈活,同時來解決了簡單工廠中沒有無參構(gòu)造方法,不能創(chuàng)建對象的問題。

  如下所示:

//步驟一: 定義工廠接口
/**
* 定義一個泛型接口
* @param <T>
*/
public interface GenericFactory<T> {
T create();
}
//步驟二:定義具體創(chuàng)建對象的工廠
/**
* 定義生產(chǎn)汽車的工廠
*/
class CarFactory implements GenericFactory<Car>{
//1.定義汽車的名稱
private String name;
//2. 定義汽車對象
private Car car;

public CarFactory() {
}

public CarFactory(String name) {
this.name = name;
}

@Override
public Car create() {
if(name==null){//沒有汽車名稱:表示使用無參數(shù)構(gòu)造
this.car = new Car();
}else{//有汽車名稱:表示使用有參數(shù)構(gòu)造
this.car = new Car(this.name);
}
return car;
}
//3.測試
public static void main(String[] args) {
GenericFactory<Car> gf = new CarFactory();
Car car = gf.create();//使用無參構(gòu)造創(chuàng)建對象
GenericFactory<Car> gf2 = new CarFactory("奔馳S500");
Car car2 = gf2.create();//使用有參構(gòu)造創(chuàng)建對象

}
}
//步驟三:定義對象的類
//定義一個汽車類
class Car{
private String name;
public Car() {
}
public Car(String name) {
this.name = name;
}
}

  缺點:代碼實現(xiàn)起來麻煩

  優(yōu)點:創(chuàng)建對象的方式更加靈活,使用有參和無參構(gòu)造都能創(chuàng)建對象。

  模板方法(最簡捷)與工廠方法不同的地方在于:用模板類(抽象類)來控制整個實例化過程的流程,本質(zhì)就是用模板類控制對象的創(chuàng)建過程,具體創(chuàng)建對象的實現(xiàn)由模板類的子類去實現(xiàn),只不過在模板類中需要用工廠方法。

  如下所示:

//1.創(chuàng)建模板類
public abstract class GenericTemplate<T> {
//1.定義泛型變量
private T t;
//2.定義抽象方法
public abstract T create();
}
//2.創(chuàng)建模板類的生成者(實現(xiàn)類)
class CarCreator extends GenericTemplate<Car> {
//1.定義工廠對象:引入工廠方法
private CarFactory cf ;

public CarCreator() {
this.cf = new CarFactory();
}

public CarCreator(String carName) {
this.cf = new CarFactory(carName);
}
//2.重寫模板類的方法
@Override
public Car create() {
return cf.create();
}
}

  優(yōu)點:

  方式最簡捷,因為直接調(diào)用具體的生成類即可,我們創(chuàng)建對象時,并看不到模板類的出現(xiàn)。

  闖關(guān)練習(xí)

  請描述 代碼在運行過程中 泛型在擦除后,具體表示為什么類型?(單選)

  A: Class類型

  B: T類型

  C: Object類型

  D: Type類型

  答案:C

  解析:

  在代碼運行過程中,泛型會被擦除(也就是泛型會消失),這時泛型的類型通通都會表示為Object類型。

  因為定義泛型時,可以指定任意類型,比如List<String>,Set<Number>,所以在泛型擦除后,只有Object類型可以表示任意類型。

好程序員公眾號

  • · 剖析行業(yè)發(fā)展趨勢
  • · 匯聚企業(yè)項目源碼

好程序員開班動態(tài)

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數(shù)據(jù)+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發(fā) <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數(shù)據(jù)分析 <高端班>

    開班時間:2021-07-12(北京)

    預(yù)約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發(fā) <高端班>

    開班時間:2021-07-12(北京)

    預(yù)約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓(xùn)IT培訓(xùn)
在線咨詢
IT培訓(xùn)IT培訓(xùn)
試聽
IT培訓(xùn)IT培訓(xùn)
入學(xué)教程
IT培訓(xùn)IT培訓(xùn)
立即報名
IT培訓(xùn)

Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號-5 京公網(wǎng)安備 11010802035720號

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            蜜臀久久久99精品久久久久久| 丁香另类激情小说| 亚洲激情一二三区| 国产精品久久精品日日| 2021国产精品久久精品| 91精品国产色综合久久不卡蜜臀| 欧美综合久久久| 91福利视频在线| 91色综合久久久久婷婷| 不卡电影免费在线播放一区| 国产成人免费高清| 国产精品一区一区三区| 国产在线日韩欧美| 国产自产视频一区二区三区| 黄一区二区三区| 麻豆成人久久精品二区三区红| 五月开心婷婷久久| 日日夜夜精品视频天天综合网| 性久久久久久久| 午夜视频一区在线观看| 日韩在线一区二区三区| 日本sm残虐另类| 另类欧美日韩国产在线| 久久国产精品区| 国产一区视频在线看| 国产凹凸在线观看一区二区| 福利电影一区二区三区| av在线一区二区三区| 91免费版在线看| 欧美三区免费完整视频在线观看| 欧美日韩www| 日韩色在线观看| 26uuu色噜噜精品一区二区| 久久精品视频免费观看| 国产精品白丝在线| 亚洲第一二三四区| 久久电影网电视剧免费观看| 国产成人免费在线| 91视频xxxx| 欧美一区二区在线免费观看| 欧美电视剧在线观看完整版| 久久久久久久国产精品影院| 国产精品传媒视频| 午夜婷婷国产麻豆精品| 国产一区二区三区免费看| 99久久er热在这里只有精品66| 91小视频在线免费看| 欧美丰满一区二区免费视频| 久久久久国色av免费看影院| 中文字幕一区二区三区精华液 | 国产成人精品一区二| 99久久精品国产一区| 欧美日韩国产色站一区二区三区| 欧美大片在线观看一区| 国产精品久久看| 日韩精品一级二级| 成人av影院在线| 欧美日韩成人高清| 国产精品网站在线播放| 午夜欧美2019年伦理| 国产不卡一区视频| 欧美一区二区女人| 亚洲欧美在线aaa| 久久福利视频一区二区| 91黄色激情网站| 国产亚洲va综合人人澡精品| 亚洲高清不卡在线观看| 大桥未久av一区二区三区中文| 欧美区在线观看| 1区2区3区国产精品| 久久精品国产网站| 欧美亚洲国产bt| 国产精品入口麻豆九色| 久久精品国产99| 欧美色视频一区| 中文字幕中文在线不卡住| 蓝色福利精品导航| 欧美三级视频在线观看| 国产精品狼人久久影院观看方式| 美国毛片一区二区三区| 91福利精品第一导航| 国产精品女上位| 精品系列免费在线观看| 欧美日韩激情一区二区| 亚洲免费在线视频一区 二区| 久久er99精品| 91精品国产91久久综合桃花| 亚洲乱码精品一二三四区日韩在线| 国产一区二三区好的| 日韩天堂在线观看| 午夜a成v人精品| 在线观看免费成人| 最新久久zyz资源站| 国产福利91精品一区二区三区| 欧美一区二区三级| 天堂蜜桃一区二区三区| 在线观看一区不卡| 亚洲女女做受ⅹxx高潮| 大尺度一区二区| 欧美国产欧美综合| 国产99久久久国产精品| 久久久五月婷婷| 狠狠久久亚洲欧美| 日韩美女一区二区三区| 毛片av一区二区| 欧美一级夜夜爽| 日本欧美一区二区三区| 91精品黄色片免费大全| 日韩精品一卡二卡三卡四卡无卡 | 中文字幕亚洲综合久久菠萝蜜| 国产风韵犹存在线视精品| 久久精品日韩一区二区三区| 国产精品综合网| 日本一区二区在线不卡| av高清不卡在线| 自拍偷在线精品自拍偷无码专区| 波多野结衣在线一区| 中文字幕在线一区二区三区| 白白色 亚洲乱淫| 亚洲天堂久久久久久久| 99久久精品国产导航| 一区二区三区精品在线观看| 色8久久人人97超碰香蕉987| 亚洲一区二区三区爽爽爽爽爽| 91福利国产成人精品照片| 亚洲国产精品自拍| 91精品国产91综合久久蜜臀| 日本视频在线一区| 精品成人一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 国模无码大尺度一区二区三区| 精品国产一区二区亚洲人成毛片| 韩国精品久久久| 国产精品美女久久久久久久久久久| 99精品国产一区二区三区不卡| 一区二区三区中文字幕| 欧美精三区欧美精三区| 精品一区二区在线免费观看| 国产日产欧美一区二区视频| 91免费精品国自产拍在线不卡| 亚洲激情图片一区| 日韩三级免费观看| 成人久久视频在线观看| 亚洲国产一区二区三区| 日韩欧美三级在线| 成人app在线观看| 亚洲不卡av一区二区三区| 欧美成人aa大片| av中文字幕在线不卡| 日韩精品1区2区3区| 欧美国产97人人爽人人喊| 欧美午夜电影网| 国产成人高清在线| 亚洲成av人片在线| 国产欧美日韩三级| 欧美体内she精高潮| 国产河南妇女毛片精品久久久| 一区二区三区不卡在线观看| 欧美r级电影在线观看| 色欧美日韩亚洲| 国内精品写真在线观看| 亚洲激情图片一区| 久久免费精品国产久精品久久久久| 色婷婷综合久久久| 国产一区二三区| 视频一区二区三区在线| 国产精品久久国产精麻豆99网站| 欧美一区午夜精品| 色网综合在线观看| 国产精品18久久久久| 亚洲成人av一区二区三区| 中文久久乱码一区二区| 欧美一级搡bbbb搡bbbb| 一本大道久久a久久精品综合| 国产自产视频一区二区三区| 亚洲成人综合视频| 成人免费小视频| 国产亚洲欧美一级| 欧美成人精品1314www| 在线观看91视频| 99精品国产99久久久久久白柏| 国产一区二三区| 久久综合综合久久综合| 亚洲123区在线观看| 日韩美女视频一区| 国产色综合一区| 精品处破学生在线二十三| 这里只有精品免费| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产成人精品一区二| 国产综合色产在线精品| 美女高潮久久久| 青青草国产精品97视觉盛宴| 亚洲一区二区免费视频| 亚洲精品久久久久久国产精华液| 中国色在线观看另类| 国产午夜精品一区二区| 久久久国产午夜精品| 久久综合资源网| 精品成人在线观看|