/** * 测试实体类 属性都是私有的 */public class Model {private String a;private String b;@Overridepublic String toString() {return \"model [a=\" + a + \", b=\" + b + \"]\";}}
/** * 测试main方法 */public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { Model m = new Model(); Class<?> classType = m.getClass(); Field a = classType.getDeclaredField(\"a\"); Field b = classType.getDeclaredField(\"b\"); a.setAccessible(true); // 抑制Java对修饰符的检查 b.setAccessible(true); // 抑制Java对修饰符的检查 a.set(m, \"测试aaa\"); b.set(m, \"测试bbb\"); System.out.println(m);}
如果想防止通过反射修改私有属性也是有办法的
我记得java中有个类还是配置叫SecurityManager,通过对jvm的配置来启用安全策略,然后在反射时进行权限检查 ,具体没有实现过 可以查看相关资料。
谢谢观看!