You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何获取Field字段对应的完整泛型类型信息

实现方案

Java泛型会在编译期执行类型擦除,直接调用Field.getType()只能拿到擦除后的原始类型List,要获取完整的参数化类型信息,需要使用Field.getGenericType()方法处理:

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

class X {
    private String y;
}

class T {
    private List<X> w;
    private void run() throws NoSuchFieldException {
        Field f = getClass().getDeclaredField("w");
        Type fieldGenericType = f.getGenericType();
        if (fieldGenericType instanceof ParameterizedType pt) {
            // 获取完整的泛型类型描述,输出为java.util.List<X的全限定名>
            String fullTypeName = pt.getTypeName();
            System.out.println(fullTypeName);
            
            // 如果要单独拿泛型参数X的Class对象
            Class<?> genericArgClass = (Class<?>) pt.getActualTypeArguments()[0];
            System.out.println(genericArgClass.getName());
        }
    }

    public static void main(String[] args) throws NoSuchFieldException {
        new T().run();
    }
}

说明

  • getAnnotatedType是用来获取类型上挂载的注解信息的,和泛型参数提取无关,所以无法满足你的需求
  • 上述方案仅适用于字段泛型参数在编译期固定写死的场景,如果是类级别的泛型参数(比如class T<V> { private List<V> w; }),需要额外递归解析父类的泛型签名才能拿到实际的参数类型

内容的提问来源于stack exchange,提问作者http8086

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:36:03