文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java如何使用反射获取list泛型

2023-07-05 07:24

关注

这篇文章主要介绍“Java如何使用反射获取list泛型”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何使用反射获取list泛型”文章能帮助大家解决问题。

通过属性来获取泛型的类型

Field[] fields = bean.getClass().getDeclaredFields();for(Field f : fields){f.setAccessible(true);if(f.getType() == java.util.List.class){// 如果是List类型,得到其Generic的类型  Type genericType = f.getGenericType(); if(genericType == null) continue;  // 如果是泛型参数的类型   if(genericType instanceof ParameterizedType){   ParameterizedType pt = (ParameterizedType) genericType;//得到泛型里的class类型对象  Class<?> genericClazz = (Class<?>)pt.getActualTypeArguments()[0]; }   }

通过class对象来获取泛型类型

Type type = getClass().getGenericSuperclass();System.err.println("generic super class type:" + type);Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];//trueType就是泛型的真实类型

一、getSuperclass 返回直接继承的父类(由于编译擦除,没有显示泛型参数)

二、getGenericSuperclass 返回直接继承的父类(包含泛型参数)

返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。

如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。

如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

列如

package cn.test;public class Test {    public static void main(String[] args) {        System.out.println("Student.class.getSuperclass()\t"                             + Student.class.getSuperclass());        System.out.println("Student.class.getGenericSuperclass()\t"                            + Student.class.getGenericSuperclass());        System.out.println("Test.class.getSuperclass()\t"                             + Test.class.getSuperclass());        System.out.println("Test.class.getGenericSuperclass()\t"                            + Test.class.getGenericSuperclass());        System.out.println("Object.class.getGenericSuperclass()\t"                             + Object.class.getGenericSuperclass());        System.out.println("Object.class.getSuperclass()\t"                             + Object.class.getSuperclass());        System.out.println("void.class.getSuperclass()\t"                             + void.class.getSuperclass());        System.out.println("void.class.getGenericSuperclass()\t"                             + void.class.getGenericSuperclass());        System.out.println("int[].class.getSuperclass()\t"                             + int[].class.getSuperclass());        System.out.println("int[].class.getGenericSuperclass()\t"                             + int[].class.getGenericSuperclass());    }}class Person<T> {}class Student extends Person<Test> {}

输出结果:

Student.class.getSuperclass() class cn.test.PersonStudent.class.getGenericSuperclass() cn.test.Person<cn.test.Test>Test.class.getSuperclass() class java.lang.ObjectTest.class.getGenericSuperclass() class java.lang.ObjectObject.class.getGenericSuperclass() nullObject.class.getSuperclass() nullvoid.class.getSuperclass() nullvoid.class.getGenericSuperclass() nullint[].class.getSuperclass() class java.lang.Objectint[].class.getGenericSuperclass() class java.lang.Object

关于“Java如何使用反射获取list泛型”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯