Java 泛型全解析
泛型簡介
什么是泛型?
參化類型,數(shù)是JDK1.5的新特性。(定義泛型時使用參數(shù)可以簡單理解為形參),例如List<E>,Map<K,V> 編譯時的一種類型,此類型僅僅在編譯階段有效,運行時無效.例如List<String>在運行時String會被擦除,最終系統(tǒng)會認為都是Object.為什么要使用泛型?
泛型是進行類型設計或方法定義時的一種約束規(guī)范,基于此規(guī)范可以:
提高編程時靈活性(有點抽象,后續(xù)結合實例理解)。 提高程序運行時的性能。(在編譯階段解決一些運行時需要關注的問題,例如強轉)說明:泛型應用相對比較簡單,難點在泛型類或方法的設計上,通過這樣的設計如何對現(xiàn)有類進行減法設計,提高類或方法的通用性.
泛型應用類型
泛型定義時常用方式有三種(可參考List<E>,Map<K,V)等接口定義):
泛型類:class 類名<泛型,…>{} 泛型接口:interface 接口名<泛型,…>{} 泛型方法: <泛型> 方法返回值類型 方法名(形參){}泛型類定義及應用
類泛型定義:(用于約束類中方法參數(shù)和方法返回值類型)
class Array<T>{//類泛型:類名<泛型> Object[] array=new Object[10]; public void add(T t){}//通過類泛型約束方法參數(shù)類型 public T get(int i){//通過類泛型約束方法返回值類型 return (T)array[i]; }}
泛型接口定義及應用
定義接口時指定泛型,用于約束接口方法參數(shù)類型以及方法返回值類
interface Task<Param,Result>{//思考map中的泛型Map<K,V> /** * 此方法用于執(zhí)行任務 * @param arg 其類型由泛型參數(shù)Param決定 * @return 其類型由泛型參數(shù)result決定 */ Result execute(Param arg);}
泛型接口應用實踐
class ConvertTask implements Task<String,Integer>{ @Override public Integer execute(String arg) { // TODO Auto-generated method stub return Integer.parseInt(arg); }}
泛型定義及應用
泛型方法中的泛型僅僅應用于當前方法,主要應用于一些靜態(tài)方法,當然非靜態(tài)方法也可以應用。
class ObjectFactory{ /**泛型方法*/ public static <T>T newInstance(Class<T> cls){ return (T)cls.newInstance(); }}
泛型應用通配符應用
無界限定通配符
泛型無界通配符使用”?”進行表示,可以代表一種任意參數(shù)類型(實參類型)。一般應用于變量的定義。例如:Class<?> c1;
Class<?> c=Class.forName('java.util.Date');
上屆界限定通配符
泛型上屆限定符通過“<? extends 類型>”方式進行實現(xiàn),主要用于方法參數(shù)或方法的返回值類型,例如:
static void doPrint(List<? extends CharSequence> list){ System.out.println(list);}
下屆限定通配符
泛型下屆限定符通過“<? super 類型>”方式進行實現(xiàn),主要用于方法參數(shù)或方法的返回值類型,例如:
static void doPrint(Set<? super Integer> set){ System.out.println(list);}
泛型類型擦除實踐分析
泛型是編譯時的一種類型,在運行時無效,運行時候都會變成Object類型,例如:
ArrayList<String> list = new ArrayList<String>();list.add('A');//list.add(100);//直接不可以//通過反射將100添加到集合list.getClass().getMethod('add', Object.class).invoke(list, 100);System.out.println(list);
總結(Summary)
本小節(jié)對泛型的定義,應用場景,應用類型以及泛型的類型擦出進行了分析和實踐,希望在后續(xù)項目實踐中對泛型有一個更好的認識。
以上就是Java 泛型全解析的詳細內(nèi)容,更多關于Java 泛型的資料請關注好吧啦網(wǎng)其它相關文章!
相關文章:
1. Warning: require(): open_basedir restriction in effect,目錄配置open_basedir報錯問題分析2. ASP.NET Core 5.0中的Host.CreateDefaultBuilder執(zhí)行過程解析3. ASP調(diào)用WebService轉化成JSON數(shù)據(jù),附json.min.asp4. SharePoint Server 2019新特性介紹5. ASP中常用的22個FSO文件操作函數(shù)整理6. React+umi+typeScript創(chuàng)建項目的過程7. php網(wǎng)絡安全中命令執(zhí)行漏洞的產(chǎn)生及本質(zhì)探究8. 無線標記語言(WML)基礎之WMLScript 基礎第1/2頁9. 三個不常見的 HTML5 實用新特性簡介10. php測試程序運行速度和頁面執(zhí)行速度的代碼
