java的泛型你真的了解嗎
泛型的概述和優(yōu)勢
泛型概述
泛型:是JDK5中引入的特性,可以在編譯階段約束操作的數(shù)據(jù)類型,并進行檢查。 泛型的格式:<數(shù)據(jù)類型>; 注意:泛型只能支持引用數(shù)據(jù)類型。 集合體系的全部接口和實現(xiàn)類都是支持泛型的使用的。
泛型的好處:
統(tǒng)一數(shù)據(jù)類型。 把運行時期的問題提前到了編譯期間,避免了強制類型轉(zhuǎn)換可能出現(xiàn)的異常,因為編譯階段類型就能確定下來。
泛型可以在很多地方進行定義:
類后面 --> 泛型類 方法申明上 --> 泛型方法 接口后面 --> 泛型接口
自定義泛型類
泛型類的概述
定義類時同時定義了 泛型的類 就是 泛型類。
泛型類的格式:修飾符 class 類名<泛型變量(只能是引用類型)>{ }
范例:public class MyArrayList<T> { }
此處泛型變量T可以隨便寫為任意標(biāo)識,常見的如E、T、K、V等。
作用:編譯階段可以指 定數(shù)據(jù)類型**(必須是引用類型)**,類似于集合的作用。
課程案例導(dǎo)學(xué)
模擬ArrayList集合自定義一個集合MyArrayList集合,完成添加和刪除功能的泛型設(shè)計即可。
問題1:泛型類的核心思想?
把出現(xiàn)泛型變量的地方全部替換成傳輸?shù)恼鎸崝?shù)據(jù)類型
問題2:泛型類的作用?
編譯階段約定操作的數(shù)據(jù)的類型,類似于集合的作用。
自定義泛型方法
泛型方法的概述
定義方法時同時定義了 泛型的方法 就是 泛型方法。
泛型方法的格式:修飾符 <泛型變量> 方法返回值 方法名稱(形參列表){}
范例: public <T> void show(T t) { // <T>表示參數(shù)的類型,一般在public或者static的后面
}
作用:方法中可以使用泛型接收一切實際類型的參數(shù),方法更具備通用性。
課程案例導(dǎo)學(xué)
給你任何一個類型的數(shù)組,都能返回它的內(nèi)容。也就是實現(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);
}
}
}
問題1、泛型方法的核心思想:
把出現(xiàn)泛型變量的地方 全部替換 成傳輸?shù)恼鎸崝?shù)據(jù)類型
問題2、泛型方法的作用
方法中可以使用泛型接收一 切實際類型的參數(shù),方法更具備通用性
自定義泛型接口
泛型接口的概述
使用了泛型定義的接口就是泛型接口。
泛型接口的格式:修飾符 interface 接口名稱<泛型變量>{
}
范例: public interface Data<E>{}
課程案例導(dǎo)學(xué)
教務(wù)系統(tǒng),提供一個接口可約束一定要完成數(shù)據(jù)(學(xué)生,老師)的增刪改查操作

問題1、泛型接口的作用
泛型接口可以約束實現(xiàn)類,實現(xiàn)類可以在實現(xiàn)接口的時候傳入自己操作的數(shù)據(jù)類型這樣重寫的方法都將是針對于該類型的操作。
泛型通配符、上下限
通配符:?
? 可以在“使用泛型”的時候代表 一切類型。 E T K V 是在定義 泛型 的時候使用的。
泛型通配符:案例導(dǎo)學(xué)
開發(fā)一個極品飛車的游戲,所有的汽車都能一起參與比賽。
特別注意:雖然BMW和BENZ都繼承了Car但是ArrayList<BMW>和ArrayList<BENZ>與ArrayList<Car>沒有關(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的子類都可以傳入進去
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{
}
泛型的上下限:
? 可以在“使用泛型”的時候代表 一切類型。 ? extends Car: ?必須是Car或者其子類 泛型上限 ? super Car : ?必須是Car或者其父類 泛型下限
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java實用小技能之快速創(chuàng)建List常用幾種方式
java集合可以說無論是面試、刷題還是工作中都是非常常用的,下面這篇文章主要給大家介紹了關(guān)于Java實用小技能之快速創(chuàng)建List常用的幾種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-12-12
Java使用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)
AI已經(jīng)在各行各業(yè)中廣泛應(yīng)用,助力于各式各樣的業(yè)務(wù),而在機器人對話中,我們可以通過利用百度AI中的自然語言處理、問答知識圖譜等技術(shù),使機器人可以更加智能化、自然化的為用戶服務(wù),本文介紹Java利用百度AI接口實現(xiàn)智能機器人對話系統(tǒng)2024-01-01
List集合中對數(shù)據(jù)實現(xiàn)多重規(guī)則進行排序的案例
今天小編就為大家分享一篇關(guān)于List集合中對數(shù)據(jù)實現(xiàn)多重規(guī)則進行排序的案例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java數(shù)據(jù)結(jié)構(gòu)之有效隊列定義與用法示例
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之有效隊列定義與用法,結(jié)合實例形式分析了java有效隊列的數(shù)據(jù)插入、刪除、判斷、計算等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Java實現(xiàn)經(jīng)典捕魚達人游戲的示例代碼
《捕魚達人》是一款以深海狩獵為題材的休閑競技游戲。本文將利用Java實現(xiàn)這一經(jīng)典的游戲,文中采用了swing技術(shù)進行了界面化處理,需要的可以參考一下2022-02-02

