通过反射获得泛型的参数化类型·黎活明老师贡献的一段代码:package lqq.heima.day2;
import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.util.Date;import java.util.Vector;
public class GenericalReflection { @SuppressWarnings("unused") private Vector<Date> dates = new Vector<Date>(); public void setDates(Vector<Date> dates){ this.dates = dates; }
/** * @param args */ @SuppressWarnings("unchecked") public static void main(String[] args) { // TODO Auto-generated method stub final Method [] methods = GenericalReflection.class.getMethods(); for(Method method:methods) { if(method.getName().equals("setDates")){ final ParameterizedType pType = (ParameterizedType) method.getGenericParameterTypes()[0]; System.out.println("setDates(" +((Class) pType.getRawType()).getName() + "<" + ((Class)pType.getActualTypeArguments()[0]) .getName() + ">)"); } }
}
}实例代码:package lqq.heima.day2;
import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.Date;import java.util.Vector;
public class ApplyGeneric { public static void applyGeneric(Vector<Date> param){ }
/** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //第一步:得到这个类中的指定的方法 Method method = ApplyGeneric.class.getDeclaredMethod("applyGeneric", Vector.class); //第二步:得到该方法的泛型的{参数化类型}类ParameterizedType Type [] types = method.getGenericParameterTypes(); ParameterizedType pType = (ParameterizedType) types[0]; /*第三步:分别得到该参数化类型的原始类型和实际类型,注意实际类型可能是有多个的(如:Vector<K,V>),所以getActualTypeArguments方法返回的是一个Type类型的数组*/ System.out.println(pType.getRawType()); System.out.println(pType.getActualTypeArguments()[0]); }
}