Java泛型初探————泛型通配
生活随笔
收集整理的這篇文章主要介紹了
Java泛型初探————泛型通配
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
T ? ?? ? ?K ? ?V ? ?E
?——表示不確定的Java類型T——表示Java類型
K、V——分別代表鍵-值中的Key-Value,例如Map<K,V>,put(K key, V value)
E——代表Element,例如List<E>,add(E e)
java.lang.Class
Class類的實(shí)例,描述的是Java應(yīng)用在JVM中的普通類(class 和 enum)或接口(interface 和annotion)。換句話說,每個java類運(yùn)行時都在JVM中表現(xiàn)為一個Class對象。Class對象獲取:
第一種方式: 對象.getClass()
Student sdt = new Student(); Class<?> sdtClz = sdt.getClass();第二種方式: 類名.class
Class<?> sdtClz2 = Student.class;
第三種方式:靜態(tài)方法Class.forName("完整類名")
Class<?> sdtClz3 = Class.forName("thinging.in.java.Student"); 說明:關(guān)于Class對象的用處,像forName()和newInstance()都是比較常見的,其他方法請參考Class類源碼數(shù)組同樣也被映射為Class對象的一個類,根據(jù)數(shù)組元素類型和維數(shù)的不同,具有相同的數(shù)組元素類型與維數(shù)的數(shù)組會共享同一個Class對象。另外,八大基本型和關(guān)鍵字void同樣表現(xiàn)為Class對象。
Class<T> 、Class<?> 、T
Class<?>是通配泛型,?代表任何類型,也可以(取巧地)理解為Object類型(也就是說Class<?>與Class<Object>是等價的)。因此,Object類型的Class對象,在newInstance的時候當(dāng)然也是返回一個Object對象,如果我們需要具體的某一個類的對象,當(dāng)然需要強(qiáng)轉(zhuǎn)。但是,Class<T>在實(shí)例化的時候,T要替換成具體類。也就是類似于Class<Student>、Class<Square>這類形式,這種方式,我們在使用Class對象的時候?qū)lass對象進(jìn)行了類型約束,因此,在使用Class對象進(jìn)行實(shí)例化的時候(Class.newInstance())就不需要進(jìn)行強(qiáng)制轉(zhuǎn)化成我們需要的類型,因?yàn)?lt;T>已經(jīng)幫我們進(jìn)行了類型的約束。
T 同樣表示某一個具體類型,我們定義一個泛型方法如下:
public static <T> String getSomething(T bean){return "something"; }當(dāng)我們調(diào)用這個getSomething方法的時候,允許程序員傳入任何類型的對象,但是參數(shù)的類型T只是在傳值時可以任意選擇,但是一旦傳入了某個具體類型的bean,那么運(yùn)行時的T便已經(jīng)確定。另外,參數(shù)類型需要寫在返回值前面并用<>括起來。
受限通配、下限通配
<? extends T> 代表受限通配,表示T類型的子類;<? super T> 代表下限通配,表示T類型的一個未知父類。
總結(jié)
以上是生活随笔為你收集整理的Java泛型初探————泛型通配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux进阶之路————Linux运行
- 下一篇: oracle 12c alert,Ora