Java如何从无Getter方法的只读类中提取各字段的对应值
解决方案
你要获取的是static修饰的静态常量,直接调用Field类的get()方法,传入null作为参数即可(静态字段不属于特定实例,不需要传入类实例对象),同时建议增加类型、修饰符判断逻辑避免出现转换错误,处理反射相关的异常即可。
完整可运行代码示例
import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class ReadColorConstants { public static void main(String[] args) { Field[] fields = colorConstants.class.getFields(); for (Field field : fields) { // 过滤出public static final String类型的常量,避免误取其他字段 if (field.getType() == String.class && Modifier.isPublic(field.getModifiers()) && Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) { try { String fieldName = field.getName(); // 静态字段get方法传入null即可获取值 String value = (String) field.get(null); // 此处可添加你自己的写入文件逻辑 System.out.println(fieldName + " = " + value); } catch (IllegalAccessException e) { // 字段为public权限,正常场景不会触发该异常,按需处理即可 e.printStackTrace(); } } } } }
注意事项
- 如果你确认
colorConstants类中所有public字段都是你需要的String类型静态常量,可以省略前面的修饰符、类型判断逻辑,直接取值即可 get()方法默认返回Object类型,需要根据实际字段类型强转,这里你的常量都是String类型,所以直接转String即可- final修饰符只会限制字段值的修改,不会限制反射读值,public权限的字段不需要额外修改访问权限即可读取
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

