Java重要技术(24)泛型之使用反射访问参数化类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)泛型之使用反射访问参数化类型的主要内容,如果未能解决你的问题,请参考以下文章