java 通過反射獲取泛型的型別
阿新 • • 發佈:2018-11-20
分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!http://www.captainbed.net/
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
獲取幾種形式泛型的Class型別:
ClassA類:
import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;public class ClassA <T>{ private T obj; public void setObject(T obj) { this.obj = obj; } public T getObject () { return obj; } /** * 獲取T的實際型別 */ public void testClassA() throws NoSuchFieldException, SecurityException { System.out.print("getSuperclass:"); System.out.println(this .getClass().getSuperclass().getName()); System.out.print("getGenericSuperclass:"); Type t = this.getClass().getGenericSuperclass(); System.out.println(t); if (ParameterizedType.class.isAssignableFrom(t.getClass())) { System.out.print("getActualTypeArguments:"); for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) { System.out.print(t1 + ","); } System.out.println(); } }}
Test類:
import java.lang.reflect.Type;import java.util.List;import java.util.Map;import java.lang.reflect.ParameterizedType;public class Test extends ClassA<String> { private List<String> list; private Map<String, Object> map; /*** * 獲取List中的泛型 */ public static void testList() throws NoSuchFieldException, SecurityException { Type t = Test.class.getDeclaredField("list").getGenericType(); if (ParameterizedType.class.isAssignableFrom(t.getClass())) { for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) { System.out.print(t1 + ","); } System.out.println(); } } /*** * 獲取Map中的泛型 */ public static void testMap() throws NoSuchFieldException, SecurityException { Type t = Test.class.getDeclaredField("map").getGenericType(); if (ParameterizedType.class.isAssignableFrom(t.getClass())) { for (Type t1 : ((ParameterizedType) t).getActualTypeArguments()) { System.out.print(t1 + ","); } System.out.println(); } } public static void main(String args[]) throws Exception { System.out.println(">>>>>>>>>>>testList>>>>>>>>>>>"); testList(); System.out.println("<<<<<<<<<<<testList<<<<<<<<<<<\n"); System.out.println(">>>>>>>>>>>testMap>>>>>>>>>>>"); testMap(); System.out.println("<<<<<<<<<<<testMap<<<<<<<<<<<\n"); System.out.println(">>>>>>>>>>>testClassA>>>>>>>>>>>"); new Test().testClassA(); System.out.println("<<<<<<<<<<<testClassA<<<<<<<<<<<"); }}
結果:
>>>>>>>>>>>testList>>>>>>>>>>>class java.lang.String,<<<<<<<<<<<testList<<<<<<<<<<<>>>>>>>>>>>testMap>>>>>>>>>>>class java.lang.String,class java.lang.Object,<<<<<<<<<<<testMap<<<<<<<<<<<>>>>>>>>>>>testClassA>>>>>>>>>>>getSuperclass:com.pelin.util.ClassAgetGenericSuperclass:com.pelin.util.ClassA<java.lang.String>getActualTypeArguments:class java.lang.String,<<<<<<<<<<<testClassA<<<<<<<<<<<