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/n/160047.html
微信扫一扫
支付宝扫一扫