首页 > 代码库 > Java重要技术(24)泛型之使用反射访问参数化类型
Java重要技术(24)泛型之使用反射访问参数化类型
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)泛型之使用反射访问参数化类型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。