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