先推荐两篇文章(分为上下两篇),讲的比较好
https://www.jianshu.com/p/7649f86614d3
https://www.jianshu.com/p/e8eeff12c306
下边是写的例子,保留下
ParameterizedType:
public class ParameterizedTypeTest<E, R> {
private Map<E, R> map;
public static void main(String[] args) throws NoSuchFieldException {
Field field = ParameterizedTypeTest.class.getDeclaredField("map");
Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] types = parameterizedType.getActualTypeArguments();
Type rawType = parameterizedType.getRawType();
Type ownType = parameterizedType.getOwnerType();
}
}
}
GenericArrayType:
public class GenericArrayTypeTest<E, R> {
private Map<E, R>[] map;
public static void main(String[] args) throws NoSuchFieldException {
Field field = GenericArrayTypeTest.class.getDeclaredField("map");
Type type = field.getGenericType();
if (type instanceof GenericArrayType) {
GenericArrayType g = (GenericArrayType) type;
Type gg = g.getGenericComponentType();
}
}
}
TypeVariable:
public class TypeVariableTest<T extends Number, E, R> {
private List<T> list;
public static void main(String[] args) throws NoSuchFieldException {
Field field = TypeVariableTest.class.getDeclaredField("list");
Type type = field.getGenericType();
if (type instanceof TypeVariable) {
TypeVariable t = (TypeVariable) type;
Type[] types = t.getBounds();
GenericDeclaration gg = t.getGenericDeclaration();
}
}
}
WildcardType:
public class WildcardTypeTest {
private List<? super Number> list;
public static void main(String[] args) throws NoSuchFieldException {
Field field = WildcardTypeTest.class.getDeclaredField("list");
Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] types = parameterizedType.getActualTypeArguments();
for (Type t : types) {
if (t instanceof WildcardType) {
WildcardType wildcardType = (WildcardType) t;
Type[] lower = wildcardType.getLowerBounds();
Type[] upper = wildcardType.getUpperBounds();
}
}
}
}
}
掌握了这些东西,对工作会提供很大的方便,也很好的扩展了自己的视野