通过变量是无法i获取该变量的泛型类型的,当把变量作为一个方法的形参,可通过方法获得该参数变量的泛型类型,代码如下:
- public class GenericTest {
- /**通过反射获得泛型的实际类型参数
- *
- */
- public static void main(String[] args) {
- try {
- //通过方法反射获得该方法的形参的变量类型字节码
- Method applymethod=GenericTest.class.getMethod("applyMap", Map.class);
- //用Type【】数组接受方法传入的形参的个数
- Type[] types=applymethod.getGenericParameterTypes();
- //取出Type[]数组中的每个形参类型并打印出来
- ParameterizedType pType=(ParameterizedType)types[0];
- System.out.println("该参数变量的实际类型: "+pType.getRawType());
- System.out.println("Map泛型参数的实际类型:"+pType.getActualTypeArguments()[0].toString()+'\t'+pType.getActualTypeArguments()[1].toString());
-
- } catch (SecurityException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- //通过变量p是没法知道这个集合中的泛型类型的,只有当把这个变量作为方法的参数时,才可以通过方法获得该参数的泛型类型。
- public static void applyMap(Map<String,Integer> p)
- {
-
- }
- }
复制代码
运行结果:
该参数变量的实际类型: interface java.util.Map
Map泛型参数的实际类型:class java.lang.String class java.lang.Integer
希望对你有帮助。 |