在閱讀本文之前可以先閱讀以下三篇,以便對Java中的泛型有一個全局的認識:
簡介
ParameterizedType是Type的子接口,表示一個有參數的類型,例如Collection<T>,Map<K,V>等。但實現上 ParameterizedType并不直接表示Collection<T>和Map<K,V>等,而是表示 Collection<String>和Map<String,String>等這種具體的類型。是不是看著眼熟,其實這就是我們常說的泛型。而ParameterizedType代表的是一個泛型的實例,我們就稱ParameterizedType為“泛型實例”吧。
當創建泛型P(如:Collection<String>)時,將解析P實例化的泛型類型聲明(如:Collection<T>),并且遞歸地創建P的所有泛型參數(如:String)。
實現這個接口的“類”必須實現一個equals()方法,該方法將任何“泛型類型”(如:Collection<T>)聲明相同且“類型參數”(如:String)也相同的兩個“類”等同起來。
Type[] getActualTypeArguments()
獲取“泛型實例”中<>里面的“泛型變量”(也叫類型參數)的值,這個值是一個類型。因為可能有多個“泛型變量”(如:Map<K,V>),所以返回的是一個Type[]。
注意:無論<>中有幾層<>嵌套,這個方法僅僅脫去最外層的<>,之后剩下的內容就作為這個方法的返回值,所以其返回值類型是不確定的。
煮個栗子:
- List<ArrayList> a1;//返回ArrayList,Class類型
- List<ArrayList<String>> a2;//返回ArrayList<String>,ParameterizedType類型
- List<T> a3;//返回T,TypeVariable類型
- List<? extends Number> a4; //返回
? extends Number
,WildcardType類型 - List<ArrayList<String>[]> a5;//返回ArrayList<String>[],GenericArrayType 類型
Type getRawType()
返回最外層<>前面那個類型,即Map<K ,V>的Map。
Type getOwnerType()
獲得這個類型的所有者的類型。這主要是對嵌套定義的內部類而言的,例如于對java.util.Map.Entry<K,V>來說,調用getOwnerType方法返回的就是interface java.util.Map。
如果當前類不是內部類,而是一個頂層類,那么getOwnerType方法將返回null。
1