通过反射获得泛型信息

来源:互联网 发布:手机淘宝黑名单在哪 编辑:程序博客网 时间:2024/05/17 12:02

获得方法泛型参数的类型

public  void test(@MyFieldAnnotation(getid=23) int id,Map<String,TargetBean> ss) {

Method m=null;
try {
m = Test.class.getDeclaredMethod("test",new Class[]{int.class,Map.class});
Type[] type=m.getGenericParameterTypes();
for(int i=0;i<type.length;i++){
if(type[i] instanceof ParameterizedType){
ParameterizedType pt = (ParameterizedType)type[i];
System.out.println(pt.getActualTypeArguments()[0]);
}

}
}
catch(Exception e){
e.printStackTrace();
}
Annotation[][] ann=m.getParameterAnnotations();
System.out.println(ann);

}


获得属性泛型信息

try {
Field f=Test.class.getDeclaredField("list");
Type type=f.getGenericType();
ParameterizedType pt=(ParameterizedType)type;
System.out.println(pt.getActualTypeArguments()[0]);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

相关方法:

public boolean isPrimitive()判断是否是基本类型
isAssignableFrom AA.class.isAssignableFrom(BB.class)的作用是判定AA表示的类或接口是否同参数BB指定的类表示的类或接口相同,或AA是否是BB的父类
ParameterizedType 表示参数化类型,如 Collection<String>

getGenericSuperclass, getSuperclass, getActualTypeArguments

     说明

           1.Class<? super T> getSuperclass():返回本类的父类

           2.Type getGenericSuperclass():返回本类的父类,包含泛型参数信息


原创粉丝点击