ParameterizedType是Java中的一個接口,用於表示帶有類型參數的泛型類型。在Java中,泛型被廣泛使用,但是在操作帶有參數的泛型類型時,非常容易出現類型不匹配的問題。為了解決這個問題,Java提供了ParameterizedType接口,我們可以通過使用ParameterizedType,來獲取泛型類型的具體類型參數。
一、ParameterizedTypeImpl
1、ParameterizedTypeImpl是ParameterizedType接口的默認實現類,構造方法如下:
ParameterizedTypeImpl(Type[] actualTypeArguments, Type ownerType, Type rawType) {
this.actualTypeArguments = actualTypeArguments;
this.ownerType = ownerType;
this.rawType = rawType;
}
其中,actualTypeArguments表示的是泛型具體類型參數,ownerType表示定義該泛型類型所在的類,rawType表示的是原始類型。我們可以通過如下的代碼來創建一個ParameterizedTypeImpl實例:
Type[] actualTypeArguments = {Integer.class, String.class};
Type ownerType = MyClass.class;
Type rawType = Map.class;
ParameterizedTypeImpl parameterizedType = new ParameterizedTypeImpl(actualTypeArguments, ownerType, rawType);
2、ParameterizedTypeImpl還有另外一個構造方法,如下:
ParameterizedTypeImpl(Type rawType, Type[] typeArguments, Type ownerType)
這個構造方法與上面的構造方法類似,只不過參數順序不同。我們可以通過下面的代碼來創建一個ParameterizedTypeImpl實例:
Type rawType = Map.class;
Type[] typeArguments = new Type[]{Integer.class, String.class};
Type ownerType = MyClass.class;
ParameterizedTypeImpl parameterizedType = new ParameterizedTypeImpl(rawType, typeArguments, ownerType);
二、ParameterizedTypeReference
1、ParameterizedTypeReference是一個泛型類,用於獲取帶參數的泛型類型。比如:
ParameterizedTypeReference<Map> typeReference = new ParameterizedTypeReference<Map>() {};
ParameterizedType parameterizedType = typeReference.getType();
這個泛型類可以使用匿名類來創建一個實例,並且由於獲取泛型類型的時機比較靠前,可以避免類型擦除問題。運行上面的代碼,我們將會得到一個ParameterizedTypeImpl的實例,該實例表示的泛型類型為Map<String, Integer>。
2、ParameterizedTypeReference內部調用了一個受保護的getType方法,可以通過繼承ParameterizedTypeReference來使用該方法,並獲取參數化類型的ParameterizedType。比如:
public class MyTypeReference extends ParameterizedTypeReference {
public ParameterizedType getType() {
Type superClass = getClass().getGenericSuperclass();
return (ParameterizedType) ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
}
ParameterizedTypeReference<Map> typeReference = new MyTypeReference<Map>() {};
ParameterizedType parameterizedType = typeReference.getType();
三、ParameterizedTypeImpl API
1、getActualTypeArguments方法:
Type[] getActualTypeArguments();
返回泛型類型實際類型參數的Type數組。
2、getRawType方法:
Type getRawType();
返回原始類型的Type對象。
3、getOwnerType方法:
Type getOwnerType();
返回定義該泛型類型所在的類的Type對象,如果泛型類型是頂級類,則返回null。
4、toString方法:
String toString();
返回該ParameterizedType的字符串表示形式,比如:
java.util.Map<java.lang.String, java.lang.Integer>
5、equals方法:
boolean equals(Object obj);
比較該ParameterizedType和指定對象是否相等。
6、hashCode方法:
int hashCode();
返回該ParameterizedType的哈希碼。
四、總結
ParameterizedType是Java中提供的一個接口,用於表示帶有類型參數的泛型類型。通過使用ParameterizedType,我們可以獲取泛型類型的具體類型參數,避免了類型擦除帶來的問題。在實際開發中,我們可以使用ParameterizedTypeImpl和ParameterizedTypeReference來幫助我們更方便地操作參數化的泛型類型。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/160047.html
微信掃一掃
支付寶掃一掃