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)
“为什么他们要这样设计”的问题始终是一个猜测的问题。这也是......除非代码的作者(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 )解释了为什么在明显不必要的地方有调用。但这是一个正交问题。