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

如何通过反射获取Java类中所有静态字符串常量的字段值?

获取Java类中静态String字段的值

嗨,我来帮你搞定这个问题!你当前的代码确实只是拿到了字段的名称,要获取静态字段对应的值,得用到Field类的get()方法,而且因为是静态字段,调用的时候传null就行啦。下面是修改后的完整代码,还加了一些必要的细节处理:

List<String> myStrings = new ArrayList<>();
Field[] fields = Constants.class.getDeclaredFields();
for (Field field : fields) {
    // 先过滤出String类型的字段,避免混入其他类型的值
    if (field.getType().equals(String.class)) {
        try {
            // 静态字段无需实例,get方法传null即可获取值
            String fieldValue = (String) field.get(null);
            myStrings.add(fieldValue);
        } catch (IllegalAccessException e) {
            // 处理访问权限异常,这里可以根据需求调整(比如打印日志或抛出运行时异常)
            e.printStackTrace();
            // 也可以抛出RuntimeException让上层处理:
            // throw new RuntimeException("无法访问静态字段: " + field.getName(), e);
        }
    }
}

几个关键要点说明:

  • 静态字段的取值方式:因为你的字段是static修饰的,属于类本身而非实例,所以调用field.get(null)就能拿到值,不用传入类的实例对象。如果是非静态字段,才需要传对应的实例。
  • 类型过滤:加上field.getType().equals(String.class)的判断,确保只收集String类型的字段值,防止以后给Constants类加了其他类型字段时,把无关值也加到列表里。
  • 异常处理:get()方法会抛出IllegalAccessException,虽然你的字段是public的不会有访问问题,但这是Java的受检异常必须处理。如果以后字段改成private,还需要先调用field.setAccessible(true)来开启访问权限。

这样修改后,你的myStrings列表里就会是["abc", "xyz"]啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:45