反射操作泛型
反射操作泛型
-
Java采用泛型擦除的机制引入泛型,java中泛型仅给编译器javac使用,确保数据的安全性和免去强制类型转换问题,一旦编译完成和泛型相关的类型全部擦除
-
反射操作泛型,通过4种类型
- ParameterizedType:表示一种参数化类型,比如Collection
- GenericArrayType: 表示一种元素类型是参数化类型或者类型变量的数组类型
- TypeVariable: 是各种类型变量的公共父接口
- WildcardType:代表通配符类型表达式
- ParameterizedType:表示一种参数化类型,比如Collection
-
package com.zhou.reflection; import com.zhou.HelloWorld; import jdk.swing.interop.SwingInterOpUtils; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map; public class test06 { public List<Integer> method1(Map<String,HelloWorld> map, List<String> list){ System.out.println("ok"); return null; } public static void main(String[] args) throws NoSuchMethodException { Method method1 = test06.class.getMethod("method1", Map.class, List.class); Type[] genericParameterTypes = method1.getGenericParameterTypes(); for (Type genericParameterType : genericParameterTypes) { System.out.println(genericParameterType); if(genericParameterType instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments(); for (Type actualTypeArgument : actualTypeArguments) { System.out.println(actualTypeArgument); } } } //返回值泛型 System.out.println("返回值泛型"); Type genericReturnType = method1.getGenericReturnType(); if(genericReturnType instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments(); for (Type actualTypeArgument : actualTypeArguments) { System.out.println(actualTypeArgument); } } } }

浙公网安备 33010602011771号