在 Java 中,“获取 Field 字段”通常有以下几种常见场景,我按使用频率和场景给你总结一下。
Class<?> clazz = User.class;
// 获取所有 public 字段(包括父类)
Field[] fields = clazz.getFields();
// 获取所有字段(不包括父类,含 private)
Field[] declaredFields = clazz.getDeclaredFields();
// 只能获取 public
Field field = clazz.getField("name");
// 可获取 private / protected
Field field = clazz.getDeclaredField("age");
User user = new User("Tom", 18);
Field field = User.class.getDeclaredField("age");
field.setAccessible(true); // 如果是 private 必须设置
Object value = field.get(user);
System.out.println(value);
field.set(user, 20);
Field field = User.class.getDeclaredField("name");
if (field.isAnnotationPresent(Column.class)) {
Column column = field.getAnnotation(Column.class);
System.out.println(column.value());
}
Field field = User.class.getDeclaredField("age");
Class<?> type = field.getType();
int modifiers = field.getModifiers();
System.out.println(type); // int
System.out.println(Modifier.isPrivate(modifiers));
Field field = User.class.getSuperclass().getDeclaredField("id");
如果你在使用 Spring / MyBatis / Jackson,通常不是手动反射,而是:
@Autowired 注入对象BeanWrapperReflectionUtilsReflectionUtils.doWithFields(User.class, field -> {
System.out.println(field.getName());
});
setAccessible(true)getField() 只能拿 publicfield.get(null)如果你是想问:
可以告诉我你的具体使用场景,我可以给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。