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

时间:2017-10-31 07:56:58

标签: java copyonwritearraylist

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

public int size() {
    return getArray().length;
}

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

1 个答案:

答案 0 :(得分:1)

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

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

  • array变量声明为private

  • getArray方法声明为包私有,其注释为:

    // Gets the array. Non-private so as to also be accessible 
    // from CopyOnWriteArraySet class. 
    

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

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