java使用反射获取泛型运行时的类
下文讲述java代码在运行时,使用反射获取其泛型类型的方法分享,如下所示:
泛型常用于以下两个场景: 1.参数化泛型 2.参数化类
泛型方法返回类型
public class MyClass { protected list<String> stringList = ...; public List<String> getStringList(){ return this.stringList; } } //使用发射 Method method = MyClass.class.getMethod("getStringList", null); Type returnType = method.getGenericReturnType(); if(returnType instanceof ParameterizedType){ ParameterizedType type = (ParameterizedType) returnType; Type[] typeArguments = type.getActualTypeArguments(); for(Type typeArgument : typeArguments){ Class typeArgClass = (Class) typeArgument; System.out.println("typeArgClass = " + typeArgClass); } } -----------运行以上代码,将输出以下信息----- typeArgClass = java.lang.String
泛型方法参数类型
public class MyClass { protected List<String> stringList = ...; public void setStringList(List<String> list){ this.stringList = list; } } method = Myclass.class.getMethod("setStringList", List.class); Type[] genericParameterTypes = method.getGenericParameterTypes(); for(Type genericParameterType : genericParameterTypes){ if(genericParameterType instanceof ParameterizedType){ ParameterizedType aType = (ParameterizedType) genericParameterType; Type[] parameterArgTypes = aType.getActualTypeArguments(); for(Type parameterArgType : parameterArgTypes){ Class parameterArgClass = (Class) parameterArgType; System.out.println("parameterArgClass = " + parameterArgClass); } } } ------运行以上代码,将输出以下信息---- parameterArgType = java.lang.String
泛型变量类型
public class MyClass { public List<String> stringList = ...; } Field field = MyClass.class.getField("stringList"); Type genericFieldType = field.getGenericType(); if(genericFieldType instanceof ParameterizedType){ ParameterizedType aType = (ParameterizedType) genericFieldType; Type[] fieldArgTypes = aType.getActualTypeArguments(); for(Type fieldArgType : fieldArgTypes){ Class fieldArgClass = (Class) fieldArgType; System.out.println("fieldArgClass = " + fieldArgClass); } } --------运行以上代码,将输出以下信息----- fieldArgClass = java.lang.String
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。