今天就跟大家聊聊有關深入淺析Java 中的泛型,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
泛型簡介
什么是泛型?
泛型是進行類型設計或方法定義時的一種約束規范,基于此規范可以:
泛型應用類型
泛型定義時常用方式有三種(可參考List<E>,Map<K,V)等接口定義):
類泛型定義:(用于約束類中方法參數和方法返回值類型)
class Array<T>{//類泛型:類名<泛型> Object[] array=new Object[10]; public void add(T t){}//通過類泛型約束方法參數類型 public T get(int i){//通過類泛型約束方法返回值類型 return (T)array[i]; } }
泛型接口定義及應用
定義接口時指定泛型,用于約束接口方法參數類型以及方法返回值類
interface Task<Param,Result>{//思考map中的泛型Map<K,V> /** * 此方法用于執行任務 * @param arg 其類型由泛型參數Param決定 * @return 其類型由泛型參數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); } }
泛型定義及應用
泛型方法中的泛型僅僅應用于當前方法,主要應用于一些靜態方法,當然非靜態方法也可以應用。
class ObjectFactory{ /**泛型方法*/ public static <T>T newInstance(Class<T> cls){ return (T)cls.newInstance(); } }
泛型應用通配符應用
無界限定通配符
泛型無界通配符使用”?”進行表示,可以代表一種任意參數類型(實參類型)。一般應用于變量的定義。例如:Class<?> c1;
Class<?> c=Class.forName("java.util.Date");
上屆界限定通配符
泛型上屆限定符通過“<? extends 類型>”方式進行實現,主要用于方法參數或方法的返回值類型,例如:
static void doPrint(List<? extends CharSequence> list){ System.out.println(list); }
下屆限定通配符
泛型下屆限定符通過“<? super 類型>”方式進行實現,主要用于方法參數或方法的返回值類型,例如:
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);
看完上述內容,你們對深入淺析Java 中的泛型有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。