基本使用
public class FetchGenericItem {
private Collection<String> names;
public static void main(String[] args) throws Exception {
FetchGenericItem fetchGenericItem = new FetchGenericItem();
//场景1:获取成员变量的泛型元素
Field field = fetchGenericItem.getClass().getDeclaredField("names");
System.out.println(fetchGenericItem.getActualTypeFieldType(field.getGenericType()));//class java.lang.String
//场景2:获取方法参数的泛型元素
Method method = fetchGenericItem.getClass().getDeclaredMethod("setNames", Collection.class);
Type[] genericParameterTypes = method.getGenericParameterTypes();
for (Type genericParameterType : genericParameterTypes) {
System.out.println(fetchGenericItem.getActualTypeFieldType(genericParameterType));//class java.lang.String
}
}
public FetchGenericItem setNames(Collection<String> names) {
this.names = names;
return this;
}
/**
* 获取泛型类型
*/
private Type getActualTypeFieldType(Type elType) {
if (elType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) elType;
Type[] types = parameterizedType.getActualTypeArguments();
if (types.length == 1)
return parameterizedType.getActualTypeArguments()[0];
else
return null;
} else
return null;
}
}
Type
type类型是所有类型的父类
image.png
网友评论