CopyOnWriteArrayList 中的几乎所有方法都使用 getArray() 而不是直接调用数组。这种行为有原因吗? 例如:
public int size() {
return getArray().length;
}
或
public int indexOf(Object o) {
Object[] elements = getArray();
return indexOf(o, elements, 0, elements.length);
}
最佳答案
“他们为什么要那样设计” 问题总是一个猜测问题。这个也是……除非代码的作者 (Doug Lea) 向我们解释他的想法。
但是,我认为主要原因是文体。
array
变量声明为private
。getArray
方法声明为私有(private)包,注释如下:// Gets the array. Non-private so as to also be accessible // from CopyOnWriteArraySet class.
如果没有方法,则需要将 array
变量本身声明为包私有(private)。我认为(我怀疑 Doug 也认为)包私有(private) getter 比包私有(private)字段好得多。 (出于所有标准原因。)如果存在 getter 和 setter,则使用它们是合理的。
相关问题 (Why setArray() method call required in CopyOnWriteArrayList) 解释了为什么在明显不必要的地方调用 setArray
。但这是一个正交问题。
关于java - 为什么 CopyOnWriteArrayList 使用 getArray() 来访问数组引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47030394/