分类: Java开发

Java 运行时反射获取来自继承的泛型

背景

正常情况下 Java 的反射是可以获取到普通的泛型类型的,例如假设存在基类

@Data
public static class Page<T> {
    private List<T> data;
    private List<String> ids;
}

此时直接执行

FieldUtils.getField(Page.class, "ids", true).getGenericType()

可以拿到类型为 ParameterizedTypejava.util.List<java.lang.String> 对象

但特殊情况下,例如子类

@Data
public static class StringPage extends Page<String> {

}

此时查询 StringPage 子类的 data 属性就只能拿到类型为 java.util.List<T> 的对象了,这时候怎么拿到它的真实类型呢

引进依赖

GitHub 找了个工具 https://github.com/leangen/geantyref

<dependency>
    <groupId>io.leangen.geantyref</groupId>
    <artifactId>geantyref</artifactId>
    <version>1.3.13</version>
</dependency>

直接调用 GenericTypeReflector.getExactFieldType(field, StringPage.class) 就可以拿到来自继承的正常真实类型 java.util.List<java.lang.String>

这个 jar 包支持功能也是比较全的,各种方法、属性、返回值来自继承的泛型都能正常获取

出版人:
lzxz1234
标签: JavaJDK

Recent Posts

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

1 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

2 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

2 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

3 年 之前

LayUI 官方树组件添加自定义按钮

LayUI 官方 tree 组…

3 年 之前