Java反射&;安全性:在整个类上禁用setAccessible

Java反射&;安全性:在整个类上禁用setAccessible,java,security,reflection,Java,Security,Reflection,问题很简单:我有一个带有一些私有属性的类,我想保证,除非我提供了修改这些属性的方法,否则任何人都无法修改这些属性 一个多小时以来,我一直在寻找一个简单的答案,但到目前为止,我还没有找到任何结论 让我们看看代码: public final class MyObject { private List<Integer> list = new ArrayList<Integer>(5); public MyObject() { for (int i = 1;

问题很简单:我有一个带有一些私有属性的类,我想保证,除非我提供了修改这些属性的方法,否则任何人都无法修改这些属性

一个多小时以来,我一直在寻找一个简单的答案,但到目前为止,我还没有找到任何结论

让我们看看代码:

public final class MyObject {

  private List<Integer> list = new ArrayList<Integer>(5);

  public MyObject() {
    for (int i = 1; i <= 5; i++) {
      list.add(i);
    }
  }

  public List<Integer> toList() {
    return new ArrayList<>(list);
  }
}
公共最终类MyObject{
私有列表=新的ArrayList(5);
公共对象(){

对于(int i=1;我看到了一些关于这个主题的精彩讨论。添加一个修改列表的接口/方法,不依赖反射巫术,不是更容易吗?根据,您需要配置一个
SecurityManager
void test() throws Exception {
  MyObject mo = new MyObject();
  Field f = mo.getClass().getDeclaredField("list");
  f.setAccessible(true);
  List<Integer> myList = (List<Integer>) f.get(mo);
  myList.add(100);
}