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

Java如何获取指定类中所有实例变量的类型列表?

Java反射获取类实例变量类型的实现方案

首先纠正认知误区:字段的声明类型属于类的固有结构信息,编译后就存储在类的字节码中,和是否实例化对象、是否给字段赋值完全无关,反射完全支持直接读取该信息。

核心实现逻辑

  • 通过类字面量Attributes.class获取目标类的Class对象,无需实例化类
  • 调用getDeclaredFields()方法获取当前类声明的所有字段(支持protected/private/默认修饰符的字段,若仅需public字段可替换为getFields())
  • 遍历字段数组,调用每个Field对象的getType()方法获取字段的声明类型,再通过getSimpleName()拿到类型的短名称
  • 存入Set自动去重,最终输出你需要的类型集合

可运行代码示例

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class GetFieldTypes {
    public static void main(String[] args) {
        Set<String> fieldTypeSet = new HashSet<>();
        // 直接获取Attributes类的字节码对象,无需创建实例
        Class<Attributes> attributesClazz = Attributes.class;

        // 获取所有本类声明的字段
        Field[] allFields = attributesClazz.getDeclaredFields();
        for (Field field : allFields) {
            // 取字段类型的短名称,如需全限定名可替换为getName()
            String typeName = field.getType().getSimpleName();
            fieldTypeSet.add(typeName);
        }

        // 转换为列表输出,结果就是你要的[A,B,C]
        List<String> result = new ArrayList<>(fieldTypeSet);
        System.out.println(result);
    }
}

注意事项

  • 如果需要获取从父类继承的字段,需要递归遍历父类的getDeclaredFields(),getDeclaredFields()默认仅返回当前类直接声明的字段
  • 如果你需要的是字段运行时的实际类型,才需要实例化对象后调用field.get(实例对象).getClass()获取,你的需求是类定义的声明类型,直接用getType()即可
  • 只要Attributes类能被正常加载到JVM中,该代码就能正常运行,不需要给任何字段赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:02