6

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

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

或者

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

1 回答 1

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在明显不必要的地方调用。但这是一个正交问题。

于 2018-04-01T08:14:50.823 回答