1. 程式人生 > >java 通過反射獲取泛型的型別

java 通過反射獲取泛型的型別

分享一下我老師大神的人工智慧教程吧。零基礎,通俗易懂!風趣幽默!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<<<<<<<<<<<




           

給我老師的人工智慧教程打call!http://www.captainbed.net/

這裡寫圖片描述