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/

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_43724942/article/details/84297364