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