2.反射系列:反射获得泛型参数

2023-11-14

  public class Person<T> {
     
    }
 
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
 
public class Student extends Person<Student> {
public static void main(String[] args) {
Student st=new Student();
Class clazz=st.getClass();
//getSuperclass()获得该类的父类
System.out.println(clazz.getSuperclass());
//getGenericSuperclass()获得带有泛型的父类
//Type是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
Type type=clazz.getGenericSuperclass();
System.out.println(type);
//ParameterizedType参数化类型,即泛型
ParameterizedType p=(ParameterizedType)type;
//getActualTypeArguments获取参数化类型的数组,泛型可能有多个
Class c=(Class) p.getActualTypeArguments()[0];
System.out.println(c);
}
}
 
打印结果:
 
class com.test.Person
com.test.Person<com.test.Student>
class com.test.Student

ParameterizedType

  • getClass().getGenericSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或
    void)的直接超类的 Type,然后将其转换ParameterizedType。
  • getActualTypeArguments() 返回表示此类型实际类型参数的 Type
    对象的数组。[0]就是这个数组中第一个了。简而言之就是获得超类的泛型参数的实际类型。 看意思可能不是很懂,我们直接看例子

package com.chen.demo;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

class param<T1, T2> {  

    class A {}  
    class B extends A {}  

    private Class<T1> entityClass;  
    public param (){  
        Type type = getClass().getGenericSuperclass();  
        System.out.println("getClass() == " + getClass());  
        System.out.println("type = " + type);  
        Type trueType = ((ParameterizedType)type).getActualTypeArguments()[0];  
        System.out.println("trueType1 = " + trueType);  
        trueType = ((ParameterizedType)type).getActualTypeArguments()[1];  
        System.out.println("trueType2 = " + trueType);  
        this.entityClass = (Class<T1>)trueType;  
        System.out.println("entityClass = " + entityClass);

        B t = new B();  
        type = t.getClass().getGenericSuperclass();  

        System.out.println("B is A's super class :" + ((ParameterizedType)type).getActualTypeArguments().length);  
    }  

}  

public class ClassDemo extends param<MyClass, MyInvoke>{
    public static void main(String[] args) {
        ClassDemo classDemo = new ClassDemo();
    }
}


package com.chen.demo;

public class MyClass {

}

package com.chen.demo;

public class MyInvoke {

}

我们再看打印结果

getClass() == class com.chen.demo.ClassDemo
type = com.chen.demo.param<com.chen.demo.MyClass, com.chen.demo.MyInvoke>
trueType1 = class com.chen.demo.MyClass
trueType2 = class com.chen.demo.MyInvoke
entityClass = class com.chen.demo.MyInvoke
B is A's super class :0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2.反射系列:反射获得泛型参数 的相关文章

  • 未找到 MessageSource 的 ResourceBundle [消息]:找不到基本名称消息的包

    在 applicationContext xml 中 我定义了 MessageSource 如下所示
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • Java套接字:在连接被拒绝异常时重试的最佳方法?

    现在我正在这样做 while true try SocketAddress sockaddr new InetSocketAddress ivDestIP ivDestPort downloadSock new Socket downloa
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • Java:拆箱整数时出现空指针异常?

    此代码导致空指针异常 我不知道为什么 private void setSiblings PhylogenyTree node Color color throws InvalidCellNumberException PhylogenyTr
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false

随机推荐

  • 【python】统计代码行数

    背景 写了一堆 cs文件 想看看一共写了多少行 代码 import os import chardet Check if a file has the given extension def has extension file exten
  • 模型转换、模型压缩、模型加速工具汇总

    目录 一 场景需求解读 二 模型转化工具汇总 1 模型转换工具的作用 2 模型转换工具简介 1 MMdnn 2 ONNX 3 X2Paddle 三 模型压缩和加速工具汇总 1 模型压缩加速工具的作用 2 模型压缩加速工具简介 1 Pocke
  • 计算方法--解线性方程组的迭代法

    文章目录 雅可比迭代法 Jacobi 迭代公式的矩阵形式 编程计算公式 迭代思路 高斯 赛德尔迭代法 Gauss Seidel 迭代法的收敛性 迭代法收敛性基本定义 收敛速度 迭代法充分条件1 迭代法充分条件2 迭代法其他收敛条件 JOR迭
  • 如何使UI自动化项目成功?

    目标 错误的目标 追求一些错误的目标 会使自动化测试走向失败 1 替代手工测试 自动化无法替代手工测试 只能作为辅助手段 在如图的第二象限起作用 2 高比率的UI测试覆盖率 不是覆盖率越高越好 由测试金字塔来看 底端占比越高 自动化效率越好
  • 学前端开发适用于移动端常见的问题

    常见问题1 移动端如何定义字体font family三大手机系统的字体 ios 系统默认中文字体是Heiti SC默认英文字体是Helvetica默认数字字体是HelveticaNeue无微软雅黑字体android 系统默认中文字体是Dro
  • 快排的非递归实现

    快排的非递归 这里我们需要借助数据结构的栈模拟快排的递归过程 栈先进后出 实现思想 1 先将需要排序的区间入到栈中 2 栈不为空时 将需要排序区间读取出来 进行单趟排序 获得了key位置 判断key左右区间是否存在 若存在 将左右下标数据入
  • ORA-28009: 应当以 SYSDBA 身份或 SYSOPER 身份建立 SYS 连接

    用 SQL Plus 连接数据库的时候 除了用户名和密码外 还要在口令后面加一个主机字符串 如下 请输入用户名 sys 口令 ANKoracle123 orcl as sysdba 转载于 https www cnblogs com ann
  • 局部自适应阈值分割方法

    github地址 https github com radishgiant ThresholdAndSegment git Local Yanowitz 由于光照的影响 图像的灰度可能是不均匀分布的 此时单一阈值的方法分割效果不好 Yano
  • 深入理解计算机系统第三版第二章答案

    练习题2 13 分析 bis 和bic都是可以看作系统已经提供好的函数 所以可以用and or not 组合设计 bis x m 置数 作用 在x这个二进制串中把m中为1的位置全部变成0 m中为0的 不变 可以看到bis x m 结果和x
  • 采用hive自带的方法生成Hfile,并将上亿大数据量导入HBASE

    采用hive自带的方法生成Hfile 并将上亿大数据量导入HBASE 1 0引入Hbase自带的jar 由于采用CDH6 1的版本 hive直接使用Hbase方法会出现异常 hive采用hbase的方法 故需要将对应Hbase中的数据引用进
  • jenkins build gerrit code bug :<<<<<<< HEAD

    问题 Jenkins build gerrit code build失败 output log中提示编译时是这一行代码出现了错误 然而提交代码的时候根本没有这一行代码 lt lt lt lt lt lt lt HEAD 分析 可能是gerr
  • Go语言值不值得学,发展前景怎么样?

    我学习了java和golang java用了5年 无限感慨java的生态 工业级的语言 无数的解决方案 不管你是做互联网还是传统行业的开发用java开发总能解决一切很多的问题 国内巨头阿里巴巴更是把java推向了极致 golang作为一个新
  • 自定义异常时exception is never thrown in the corresponding try block和unhandled exception

    自己的异常 public class UserNotExistsException extends Exception private static final long serialVersionUID 1L public UserNot
  • chrome插件 自动点击页面元素 自动填入内容

    使用较新的 manifest version 3 event 类 项目文件夹 manifest 是配置文件 Bw 是插件图标 background 是一直可以在后台运行的代码 usr input 是点击插件图标时会显示的页面 action1
  • SpringBoot JPA 定义实体类关系:一对一 (增删改查)

    SpringBoot 项目整体结构 pom xml 文件依赖
  • 交换机学习总结

    网络中数据转发主要由交换机和路由器完成 路由器属于网络七层结构的网络层 第三层 交换机一般属于数据链路层 第二层 设备 也有三层交换机和四层交换机 分别属于网络层和传输层设备 路由器负责在不同的局域网内进行数据转发 比如你要访问百度的服务器
  • IOS逆向初探

    前言 这些文章用于记录学习路上的点点滴滴 也希望能给到刚入门的小伙伴们一点帮助 爱而所向 不负所心 环境 iphone 6 MacOS Monterey 12 3 1 一 IOS开发语言 Objective C Objective C是iO
  • 读取npz,并显示图像

    1 import numpy as np import os import matplotlib pyplot as plt import sys import cv2 a np load home wgb Desktop Dex2 tra
  • Python基础11 (End)

    Python基础11 End 学习11 第七章 模块 module 1 模块化 module 程序设计理念 1 Python 程序由模块组成 一个模块对应 python 源文件 一般后缀名是 py 2 模块由语句组成 运行 Python 程
  • 2.反射系列:反射获得泛型参数

    public class Person