【发布时间】:2013-01-26 09:16:42
【问题描述】:
想象一下我有这门课:
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 方法逐步访问私有字段? (我不想要任何像 Guava 这样的库。我只需要知道正确的方法)。
【问题讨论】:
-
实际上,将其设为
final确实防止修改字段。但是,防止修改字段引用的Object比较复杂。 -
如果您认为能够修改存储在私有字段中的引用的数组与能够修改私有字段相同,那么您的心理模型就有问题。
-
如果它是私有的,为什么要首先公开它?
-
我花了一段时间才弄清楚这一点,但当我确保所有数据结构都完全封装在它们的对象中时,它总是会改进我的代码——这意味着没有办法“获取”你的“arr” ",而是在你必须在类中执行或提供迭代器时执行。
-
还有人惊讶于这个问题为什么会受到如此多的关注吗?