獲取泛型資訊
阿新 • • 發佈:2020-10-04
概述
有時候方法的引數中會出現,Map
通過反射 獲取 泛型的型別 map ,泛型的引數 String 等
例項
/** * 獲取泛型資訊 */ public class Demo06 { public void test01(Map<String,User> map, List<User> list){ System.out.println("test01"); } public Map<String,User> test02(){ System.out.println("test02"); return null; } public static void main(String[] args) throws Exception { Method test01 = Demo06.class.getDeclaredMethod("test01", Map.class, List.class); // 獲取泛型型別 Map.class, List.class Type[] genericParameterTypes = test01.getGenericParameterTypes(); for (Type genericParameterType:genericParameterTypes ) { System.out.println("#"+genericParameterType); System.out.println("========================================"); // 判斷是否屬於結構化型別 if(genericParameterType instanceof ParameterizedType){ // 強轉結構化型別,呼叫 getActualTypeArguments 獲取裡面一層 真實的引數 Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments(); // 獲取泛型引數 Map<String,User> map, List<User> list 即尖括號裡面的引數 for (Type actualTypeArgument:actualTypeArguments ) { System.out.println("##"+actualTypeArgument); } } } System.out.println("========================================"); Method test02 = Demo06.class.getMethod("test02",null); // 獲取返回的泛型型別 Type genericReturnType = test02.getGenericReturnType(); // 判斷是否屬於結構化型別 if(genericReturnType instanceof ParameterizedType){ // 強轉結構化型別,呼叫 getActualTypeArguments 獲取裡面一層 真實的引數 Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments(); // 獲取泛型引數 Map<String,User> map, List<User> list 即尖括號裡面的引數 for (Type actualTypeArgument:actualTypeArguments ) { System.out.println(actualTypeArgument); } } } }