java中对类进行了严格的封装,对一些类私有的东西进行private包装,然而可以通过java反射获取修改该字段的值。
实例:
package cn.wzy.maintest;
import cn.wzy.entity.User;
import java.lang.reflect.Field;
public class Main {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
Class<User> clazz = User.class;
User user = new User().setAge(12);
Field age = clazz.getDeclaredField("age");
age.setAccessible(true);
age.set(user,123);
System.out.println(user.getAge());
}
}
package cn.wzy.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class User {
private Integer id;
private String username;
private Integer age;
private String phoneNum;
}
结果修改age的值为:123,值得注意的是clazz.getDeclaredField()是获取所有类型的字段,而clazz.getField()是获取公有的字段。