java的泛型你真的了解嗎
泛型的概述和優(yōu)勢(shì)
泛型概述
泛型:是JDK5中引入的特性,可以在編譯階段約束操作的數(shù)據(jù)類型,并進(jìn)行檢查。 泛型的格式:<數(shù)據(jù)類型>; 注意:泛型只能支持引用數(shù)據(jù)類型。 集合體系的全部接口和實(shí)現(xiàn)類都是支持泛型的使用的。
泛型的好處:
統(tǒng)一數(shù)據(jù)類型。 把運(yùn)行時(shí)期的問(wèn)題提前到了編譯期間,避免了強(qiáng)制類型轉(zhuǎn)換可能出現(xiàn)的異常,因?yàn)榫幾g階段類型就能確定下來(lái)。
泛型可以在很多地方進(jìn)行定義:
類后面 --> 泛型類 方法申明上 --> 泛型方法 接口后面 --> 泛型接口
自定義泛型類
泛型類的概述
定義類時(shí)同時(shí)定義了 泛型的類 就是 泛型類。 泛型類的格式:修飾符 class 類名<泛型變量(只能是引用類型)>{ } 范例:public class MyArrayList<T> { } 此處泛型變量T可以隨便寫為任意標(biāo)識(shí),常見(jiàn)的如E、T、K、V等。
作用:編譯階段可以指 定數(shù)據(jù)類型**(必須是引用類型)**,類似于集合的作用。
課程案例導(dǎo)學(xué)
模擬ArrayList集合自定義一個(gè)集合MyArrayList集合,完成添加和刪除功能的泛型設(shè)計(jì)即可。
問(wèn)題1:泛型類的核心思想?
把出現(xiàn)泛型變量的地方全部替換成傳輸?shù)恼鎸?shí)數(shù)據(jù)類型
問(wèn)題2:泛型類的作用?
編譯階段約定操作的數(shù)據(jù)的類型,類似于集合的作用。
自定義泛型方法
泛型方法的概述
定義方法時(shí)同時(shí)定義了 泛型的方法 就是 泛型方法。 泛型方法的格式:修飾符 <泛型變量> 方法返回值 方法名稱(形參列表){} 范例: public <T> void show(T t) { // <T>表示參數(shù)的類型,一般在public或者static的后面 } 作用:方法中可以使用泛型接收一切實(shí)際類型的參數(shù),方法更具備通用性。
課程案例導(dǎo)學(xué)
給你任何一個(gè)類型的數(shù)組,都能返回它的內(nèi)容。也就是實(shí)現(xiàn)Arrays.toString(數(shù)組)的功能! public class GeneticDemo { public static void main(String[] args) { String[] names = {"lushimeng", "yangyinyu", "wangliang", "xigua", "xiangjia"}; printArray(names); // 把printArray方法中出現(xiàn)泛型的地方全部變化為String類型 Character[] character = {'2', 'd', 'd', 'r'}; printArray(character); // 把printArray方法中出現(xiàn)泛型的地方全部變化為Character類型 Integer[] ages = {23, 435, 56, 67, 67}; printArray(ages); // 把printArray方法中出現(xiàn)泛型的地方全部變化為Integer類型 } public static <T> void printArray(T[] array){ if(array != null){ StringBuilder sb = new StringBuilder("["); for(int i = 0; i < array.length; i++){ sb.append(array[i]).append(i != array.length - 1 ? ", ": ""); // StringBuilder的鏈?zhǔn)骄幊? } sb.append("]"); System.out.println(sb); }else{ System.out.println(array); } } }
問(wèn)題1、泛型方法的核心思想:
把出現(xiàn)泛型變量的地方 全部替換 成傳輸?shù)恼鎸?shí)數(shù)據(jù)類型
問(wèn)題2、泛型方法的作用
方法中可以使用泛型接收一 切實(shí)際類型的參數(shù),方法更具備通用性
自定義泛型接口
泛型接口的概述
使用了泛型定義的接口就是泛型接口。 泛型接口的格式:修飾符 interface 接口名稱<泛型變量>{ } 范例: public interface Data<E>{}
課程案例導(dǎo)學(xué)
教務(wù)系統(tǒng),提供一個(gè)接口可約束一定要完成數(shù)據(jù)(學(xué)生,老師)的增刪改查操作
問(wèn)題1、泛型接口的作用
泛型接口可以約束實(shí)現(xiàn)類,實(shí)現(xiàn)類可以在實(shí)現(xiàn)接口的時(shí)候傳入自己操作的數(shù)據(jù)類型這樣重寫的方法都將是針對(duì)于該類型的操作。
泛型通配符、上下限
通配符:?
? 可以在“使用泛型”的時(shí)候代表 一切類型。 E T K V 是在定義 泛型 的時(shí)候使用的。
泛型通配符:案例導(dǎo)學(xué)
開(kāi)發(fā)一個(gè)極品飛車的游戲,所有的汽車都能一起參與比賽。 特別注意:雖然BMW和BENZ都繼承了Car但是ArrayList<BMW>和ArrayList<BENZ>與ArrayList<Car>沒(méi)有關(guān)系的!! import java.util.ArrayList; public class GenericDemo { public static void main(String[] args) { ArrayList<BENZ> benzs = new ArrayList<>(); benzs.add(new BENZ()); benzs.add(new BENZ()); benzs.add(new BENZ()); go(benzs); // ? extends Car 為Car的子類都可以傳入進(jìn)去 ArrayList<BMW> bmws = new ArrayList<>(); bmws.add(new BMW()); bmws.add(new BMW()); bmws.add(new BMW()); go(bmws); ArrayList<Dog> dogs = new ArrayList<>(); dogs.add(new Dog()); // go(dogs); // 不滿足泛型上下限的條件 } public static void go(ArrayList<? extends Car> car){ // 上下限 } } class Dog{ } // 父類 class Car{ } class BENZ extends Car{ } class BMW extends Car{ }
泛型的上下限:
? 可以在“使用泛型”的時(shí)候代表 一切類型。 ? extends Car: ?必須是Car或者其子類 泛型上限 ? super Car : ?必須是Car或者其父類 泛型下限
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java實(shí)用小技能之快速創(chuàng)建List常用幾種方式
java集合可以說(shuō)無(wú)論是面試、刷題還是工作中都是非常常用的,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)用小技能之快速創(chuàng)建List常用的幾種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Java使用百度AI接口實(shí)現(xiàn)智能機(jī)器人對(duì)話系統(tǒng)
AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機(jī)器人對(duì)話中,我們可以通過(guò)利用百度AI中的自然語(yǔ)言處理、問(wèn)答知識(shí)圖譜等技術(shù),使機(jī)器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實(shí)現(xiàn)智能機(jī)器人對(duì)話系統(tǒng)2024-01-01List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例
今天小編就為大家分享一篇關(guān)于List集合中對(duì)數(shù)據(jù)實(shí)現(xiàn)多重規(guī)則進(jìn)行排序的案例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法示例
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之有效隊(duì)列定義與用法,結(jié)合實(shí)例形式分析了java有效隊(duì)列的數(shù)據(jù)插入、刪除、判斷、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Java實(shí)現(xiàn)經(jīng)典捕魚達(dá)人游戲的示例代碼
《捕魚達(dá)人》是一款以深海狩獵為題材的休閑競(jìng)技游戲。本文將利用Java實(shí)現(xiàn)這一經(jīng)典的游戲,文中采用了swing技術(shù)進(jìn)行了界面化處理,需要的可以參考一下2022-02-02