获取父类的泛型
public <T> void add(List<T> list) {
Type type = list.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
System.out.println("父类具体类型:" + parameterizedType);
Type[] arguments = parameterizedType.getActualTypeArguments();
for (Type argument : arguments) {
System.out.println("泛型参数:" + argument);
if (argument instanceof ParameterizedType) {
ParameterizedType type1 = (ParameterizedType) argument;
for (Type typeArgument : type1.getActualTypeArguments()) {
System.out.println("子---泛型参数:" + typeArgument);
}
}
}
} else {
System.out.println("没有泛型");
}
}
@Test
public void test() {
add(new ArrayList<Map<String, Integer>>() {});
}
输出结果
父类具体类型:java.util.ArrayList<java.util.Map<java.lang.String, java.lang.Integer>>
泛型参数:java.util.Map<java.lang.String, java.lang.Integer>
子---泛型参数:class java.lang.String
子---泛型参数:class java.lang.Integer
接口 具体类型:com.example.jetpark.GenericDemo$CallBack<java.util.List<java.lang.String>>
接口 具体类型:com.example.jetpark.GenericDemo$CallBack<java.util.List<java.lang.String>>
接口 泛型参数:java.util.List<java.lang.String>
接口 子---泛型参数:class java.lang.String
获取父接口的泛型
public <T> void addInterface(CallBack<T> list) {
Type[] types = list.getClass().getGenericInterfaces();
for (Type type : types) {
System.out.println("接口 具体类型:" + type);
if (type instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) type;
System.out.println("接口 具体类型:" + parameterizedType);
Type[] arguments = parameterizedType.getActualTypeArguments();
for (Type argument : arguments) {
System.out.println("接口 泛型参数:" + argument);
if (argument instanceof ParameterizedType) {
ParameterizedType type1 = (ParameterizedType) argument;
for (Type typeArgument : type1.getActualTypeArguments()) {
System.out.println("接口 子---泛型参数:" + typeArgument);
}
}
}
} else {
System.out.println("没有泛型");
}
}
}
interface CallBack<T> {
}
@Test
public void test() {
addInterface(new CallBack<List<String>>(){});
}
输出结果
接口 具体类型:com.example.jetpark.GenericDemo$CallBack<java.util.List<java.lang.String>>
接口 具体类型:com.example.jetpark.GenericDemo$CallBack<java.util.List<java.lang.String>>
接口 泛型参数:java.util.List<java.lang.String>
接口 子---泛型参数:class java.lang.String
获取方法返回值泛型
public List<Map<String, String>> testMethod() {
return null;
}
@Test
public void testM() throws Exception {
Method testMethod = getClass().getDeclaredMethod("testMethod");
Type returnType = testMethod.getGenericReturnType();
System.out.println("返回值类型:" + returnType);
if (returnType instanceof ParameterizedType) {
Type[] arguments = ((ParameterizedType) returnType).getActualTypeArguments();
for (Type argument : arguments) {
System.out.println("泛型类型:" + argument);
if (argument instanceof ParameterizedType) {
ParameterizedType type1 = (ParameterizedType) argument;
for (Type typeArgument : type1.getActualTypeArguments()) {
System.out.println("子---泛型类型:" + typeArgument);
}
}
}
}
}
输出结果
返回值类型:java.util.List<java.util.Map<java.lang.String, java.lang.String>>
泛型类型:java.util.Map<java.lang.String, java.lang.String>
子---泛型类型:class java.lang.String
子---泛型类型:class java.lang.String