java通过反射获取对象的所有的字段名称和值
对象:
@Data
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int level;
private String name;
}
User user = new User(1,"wzx");
//通过反射获取对象的所有字段,是一个数组
Field[] declaredFields = user.getClass().getDeclaredFields();
for (int i = 0; i <declaredFields.length ; i++) {
//设置是否可以访问,如果不设置将报错
declaredFields[i].setAccessible(true);
System.out.println("字段:"+declaredFields[i]);
System.out.println("字段名称:"+declaredFields[i].getName());
System.out.println("字段值:"+declaredFields[i].get(user));
}
不设置时报的错:
字段:private int com.example.entity.User.level
Exception in thread "main" java.lang.IllegalAccessException: Class com.example.controller.Cshi can not access a member of class com.example.entity.User with modifiers "private"
字段名称:level
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:296)
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:288)
at java.lang.reflect.Field.get(Field.java:390)
at com.example.controller.Cshi.main(Cshi.java:28)