通过反射获得泛型的参数化类型
·黎活明老师贡献的一段代码:
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]);
}
}