在java.util.ArrayList
类中,列表元素的对象数组定义为Package-Private:
transient Object[] elementData; // non-private to simplify nested class access
注释指出,该字段不是私有字段的原因是在嵌套的类中更容易访问。然而,嵌套的类可以很好地访问封闭类的私有数据。那么为什么elementdata
不是私有的呢?在后台是否发生了一些事情(例如,在编译时)?
当从嵌套类访问私有字段时,编译器实际上会生成一个包可见的合成访问器方法,然后使用该方法进行访问。它不能直接访问私有成员,因此为了避免这种间接访问,您可以使成员包可见。
这里有一个更详细的答案。