为什么CopyOnWriteArrayList使用getArray()来访问数组引用?

Wak*_*aka 6 java copyonwritearraylist

CopyOnWriteArrayList中的几乎所有方法都使用getArray()来直接吸引数组.这种行为有原因吗?例如 :

public int size() {
    return getArray().length;
}
Run Code Online (Sandbox Code Playgroud)

要么

    public int indexOf(Object o) {
    Object[] elements = getArray();
    return indexOf(o, elements, 0, elements.length);
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 1

“为什么他们要这样设计”的问题始终是一个猜测的问题。这也是......除非代码的作者(Doug Lea)向我们解释他的想法。

然而,我认为主要原因是风格。

  • array变量被声明为private.

  • getArray方法被声明为包私有,并带有注释:

    // Gets the array. Non-private so as to also be accessible 
    // from CopyOnWriteArraySet class. 
    
    Run Code Online (Sandbox Code Playgroud)

如果没有方法,则需要将array变量本身声明为包私有。我认为(并且我怀疑 Doug 也认为)包私有 getter 比包私有字段好得多。(出于所有标准原因。)如果 getter 和 setter 存在,那么使用它们是合理的。

相关问题(Why setArray() method call required in CopyOnWriteArrayListsetArray )解释了为什么在明显不必要的地方有调用。但这是一个正交问题。