Java基礎(chǔ)泛型詳情
一、泛型
概述:
泛型是JDK5中引入的特性,它提供了編譯時(shí)類(lèi)型安全檢測(cè)機(jī)制,該機(jī)制允許在編譯時(shí)檢測(cè)到非法的類(lèi)型
本質(zhì)上是參數(shù)化類(lèi)型,也就是說(shuō)所操作的數(shù)據(jù)類(lèi)型被指定為一個(gè)參數(shù)
參數(shù)化類(lèi)型:就是將類(lèi)型由原來(lái)的具體的類(lèi)型參數(shù)化,然后在使用/調(diào)用時(shí)傳入具體的參數(shù)
這種參數(shù)類(lèi)型可以用在類(lèi)、方法和接口中,分別被稱(chēng)為泛型類(lèi)、泛型方法、泛型接口
定義格式:
- 1.<類(lèi)型>:指定一種類(lèi)型的格式,這里的類(lèi)型可以看作是形參
- 2.<類(lèi)型1,類(lèi)型2....>:指定多種類(lèi)型的格式,多種類(lèi)型之間由,隔開(kāi),這里的類(lèi)型可以看作是形參
- 3.將來(lái)具體調(diào)用時(shí)給定的類(lèi)型可以看作是實(shí)參,并且實(shí)參的類(lèi)型只能是引用類(lèi)型
泛型的優(yōu)點(diǎn):
- 1.把運(yùn)行時(shí)期的問(wèn)題提前到了編譯時(shí)期,更容易發(fā)現(xiàn)并處理
- 2.避免了強(qiáng)制類(lèi)型轉(zhuǎn)換
二、泛型類(lèi)
定義格式:
格式:修飾符 class 類(lèi)名<T>{}
范例:public class Gneneric{}
此處的T可以隨便寫(xiě)為任意標(biāo)識(shí),常見(jiàn)的如T、E、K、V等形式的參數(shù)經(jīng)常用于表示泛型
當(dāng)一個(gè)類(lèi)使用泛型后,類(lèi)中的成員變量就不局限于一種類(lèi)型了,只要在用的時(shí)候聲明一下是什么類(lèi)型的即可
泛型類(lèi)
public class Generic<T> { ? private T t; ? ? public T getT() { ? ? ? return t; ? } ? ? public void setT(T t) { ? ? ? this.t = t; ? } } ?
調(diào)用格式:
Generic<String>g=new Generic<String>(); ? ? ? g.setT("102");
三、泛型方法
格式: 修飾符 <類(lèi)型>void 方法名(類(lèi)型 參數(shù)){}
范例:public void show(T t){}
泛型方法:
public class Generic{ ? public <T> void show(T t){ ? ? ? System.out.println(t); ? } } ?
調(diào)用格式:
public class GenericDemo { ? public static void main(String[] args) { ? ? ? Generic g = new Generic(); ? ? ? g.show("張三"); ? ? ? g.show(18); ? ? ? g.show(true); ? } }
四、泛型接口
格式: 修飾符 interface 接口名 <T>{}
范例:public interface Gneneric{}
實(shí)現(xiàn)格式:
泛型接口
public interface Generic<T>{ ? void show(T t); } ?
泛型接口實(shí)現(xiàn)類(lèi)
public class GenericImpl<T> implements Generic<T>{ ? @Override ? public void show(T t) { ? ? ? System.out.println(t); ? } }
測(cè)試類(lèi)
public class GenericDemo { ? public static void main(String[] args) { ? ? ? GenericImpl<String> g1=new GenericImpl<String>(); ? ? ? g1.show("張三"); ? ? ? GenericImpl<Integer>g2=new GenericImpl<Integer>(); ? ? ? g2.show(12); ? ? ? GenericImpl<Boolean>g3=new GenericImpl<Boolean>(); ? ? ? g3.show(true); ? ? ? Generic<Double>g4=new GenericImpl<Double>(); ? ? ? g4.show(13.15); ? ? } } ?
五、類(lèi)型通配符<?>
為了表示各種泛型List的父類(lèi),可以使用類(lèi)型通配符
- 1.List<?>:表示元素類(lèi)型位置的List,它的元素可以匹配任何的類(lèi)型
- 2.這種帶通配符的List僅代表它是各種泛型List的父類(lèi),并不能把元素添加到其中
如果說(shuō)我們不希望List<?>是任何泛型List的父類(lèi),只希望它代表某一類(lèi)泛型List的父類(lèi),可以使用類(lèi)型通配符的上限
- 1.類(lèi)型通配符的上限:<?extends 類(lèi)型>
- 2.List<? extends Number>:他表示的類(lèi)型是Number或者其子類(lèi)型
同樣的我們也可以指定下限
- 1.類(lèi)型通配符下限:<? super 類(lèi)型>
- 2.List<? super Number>:表示的類(lèi)型是Number或者其父類(lèi)型
六、可變參數(shù)
可變參數(shù)又稱(chēng)參數(shù)個(gè)數(shù)可變,用作方法的形參出現(xiàn),那么方法參數(shù)個(gè)數(shù)就是可變的了
格式:修飾符 返回值類(lèi)型 方法名(數(shù)據(jù)類(lèi)型... 變量名){}
范例:public static int sum(int...a){}
注意事項(xiàng):
- 1.這里的變量是一個(gè)數(shù)組
- 2.如果一個(gè)方法有多個(gè)參數(shù),并且包含可變參數(shù),那么可變參數(shù)要放在最后
可變參數(shù)的使用:
Arrays工具類(lèi)中有一個(gè)靜態(tài)方法
public static <T>List<T>asList(T...a):返回由指定數(shù)組支持的固定大小的列表
返回的集合不能做增刪操作,可以做修改操作
List接口中有一個(gè)靜態(tài)方法:
public static <E>List<E>of(E...elements):返回包含任意數(shù)量元素的不可變列表
返回的集合不能做增刪改操作
Set接口中有一個(gè)靜態(tài)方法:
public static <E>Set<E>of(E...elements):返回一個(gè)包含任意數(shù)量元素的不可變集合
返回的集合不能做增刪操作,沒(méi)有修改方法
再給元素時(shí),不能給重復(fù)的元素
到此這篇關(guān)于Java基礎(chǔ)學(xué)習(xí)泛型的文章就介紹到這了,更多相關(guān)Java 泛型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Spring DI依賴(lài)注入的方式和類(lèi)型
這篇文章主要介紹了詳解Spring DI依賴(lài)注入的方式和類(lèi)型,DI是由容器動(dòng)態(tài)的將某個(gè)依賴(lài)關(guān)系注入到組件之中。依賴(lài)注入的目的并非為軟件系統(tǒng)帶來(lái)更多功能,而是為了提升組件重用的頻率,并為系統(tǒng)搭建一個(gè)靈活、可擴(kuò)展的平臺(tái),需要的朋友可以參考下2023-05-05SpringCloud+Redis實(shí)現(xiàn)Api接口限流防止惡意刷接口
接口限流是為了保護(hù)系統(tǒng)和服務(wù),防止因?yàn)檫^(guò)多的請(qǐng)求而崩潰,本文主要介紹了SpringCloud+Redis實(shí)現(xiàn)Api接口限流防止惡意刷接口,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Java并發(fā) synchronized鎖住的內(nèi)容解析
這篇文章主要介紹了Java并發(fā) synchronized鎖住的內(nèi)容解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09