在閱讀本文之前可以先閱讀以下三篇,以便對Java中的泛型有一個全局的認識:
簡介
ParameterizedType是Type的子接口奠货,表示一個有參數(shù)的類型优烧,例如Collection<T>搅荞,Map<K,V>等。但實現(xiàn)上 ParameterizedType并不直接表示Collection<T>和Map<K,V>等,而是表示 Collection<String>和Map<String,String>等這種具體的類型夫晌。是不是看著眼熟泣棋,其實這就是我們常說的泛型胶哲。而ParameterizedType代表的是一個泛型的實例,我們就稱ParameterizedType為“泛型實例”吧外傅。
當創(chuàng)建泛型P(如:Collection<String>)時纪吮,將解析P實例化的泛型類型聲明(如:Collection<T>),并且遞歸地創(chuàng)建P的所有泛型參數(shù)(如:String)萎胰。
實現(xiàn)這個接口的“類”必須實現(xiàn)一個equals()方法碾盟,該方法將任何“泛型類型”(如:Collection<T>)聲明相同且“類型參數(shù)”(如:String)也相同的兩個“類”等同起來。
Type[] getActualTypeArguments()
獲取“泛型實例”中<>里面的“泛型變量”(也叫類型參數(shù))的值技竟,這個值是一個類型冰肴。因為可能有多個“泛型變量”(如:Map<K,V>),所以返回的是一個Type[]。
注意:無論<>中有幾層<>嵌套榔组,這個方法僅僅脫去最外層的<>熙尉,之后剩下的內(nèi)容就作為這個方法的返回值,所以其返回值類型是不確定的搓扯。
煮個栗子:
- 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()
獲得這個類型的所有者的類型厦幅。這主要是對嵌套定義的內(nèi)部類而言的,例如于對java.util.Map.Entry<K,V>來說慨飘,調(diào)用getOwnerType方法返回的就是interface java.util.Map确憨。
如果當前類不是內(nèi)部類,而是一個頂層類瓤的,那么getOwnerType方法將返回null休弃。
1