码迷,mamicode.com
首页 > 编程语言 > 详细

Java重要技术(24)泛型之使用反射访问参数化类型

时间:2017-04-07 23:21:33      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:com   int   访问   exception   static   string   end   name   ase   

 

1.1. 用反射访问参数化类型

 

使用反射机制可以获取到一部分参数化类型有关的信息。

public class GenericParameterTest5 {

 

static  class Base{}

static class Generic<T extends Base>{

 

public T  work( List<T>  list){

return  list.get(0);

}

 

public T  work( T obj){

return obj;

}

}

 

public static void main(String[] args) {

 

 

try {

 

 

//public T  work( List<T>  list){

Method method1  = Generic.class.getMethod("work", List.class);

System.out.println(method1.getParameters()[0].getType());

 

Type  t1 = method1.getGenericParameterTypes()[0];

ParameterizedType  pt = (ParameterizedType)t1;

System.out.println("rawtype:" +pt.getRawType()

                   + "actualtype:" + pt.getActualTypeArguments()[0].getTypeName());

 

System.out.println("-------------");

 

//public T  work( T obj){

Method method2  = Generic.class.getMethod("work", Base.class);

System.out.println(method2.getParameters()[0].getType());

 

Type  t2 = method2.getGenericParameterTypes()[0];

TypeVariable<?>  tv = (TypeVariable)t2;

System.out.println(tv.getTypeName());

GenericDeclaration  gd = tv.getGenericDeclaration();

System.out.println(gd.getTypeParameters()[0]);

 

} catch (NoSuchMethodException | SecurityException e) {

e.printStackTrace();

}

}

}

 

 

运行结果如下:

interface java.util.List

rawtype:interface java.util.Listactualtype:T

-------------

class com.test.javatechnology.genericparameter.GenericParameterTest5$Base

T

T

 

Java重要技术(24)泛型之使用反射访问参数化类型

标签:com   int   访问   exception   static   string   end   name   ase   

原文地址:http://www.cnblogs.com/coe2coe/p/6680209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!