如何防止修改类中的私有字段?

2022-08-31 07:02:07

想象一下,我有这个类:

public class Test
{
  private String[] arr = new String[]{"1","2"};    

  public String[] getArr() 
  {
    return arr;
  }
}

现在,我有另一个使用上述类的类:

Test test = new Test();
test.getArr()[0] ="some value!"; //!!!

所以这就是问题所在:我从外面访问了一个类的私有字段!我该如何防止这种情况?我的意思是如何使这个数组不可变?这是否意味着使用每种 getter 方法,您都可以通过自己的方式访问私有字段?(我不想要任何像番石榴这样的图书馆。我只需要知道正确的方法来做到这一点)。


答案 1

如果可以使用 List 而不是数组,则 Collections 会提供一个不可修改的列表

public List<String> getList() {
    return Collections.unmodifiableList(list);
}

答案 2

必须返回数组的副本

public String[] getArr() {
  return arr == null ? null : Arrays.copyOf(arr, arr.length);
}