我刚刚在研究 JDK 1.6 时发现ArrayBlockingQueue- 构造函数调用了一种公共可重写方法!我认为这对于 API 来说是一种不好的做法。
public ArrayBlockingQueue(int capacity, boolean fair,
Collection<? extends E> c) {
this(capacity, fair);
if (capacity < c.size())
throw new IllegalArgumentException();
for (Iterator<? extends E> it = c.iterator(); it.hasNext();)
add(it.next()); // -> surprise: add is public
}
我实际上是在尝试扩展ArrayBlockingQueue, 并添加一些 state 和 overrided ,当我调用构造函数时add()我立即得到了。我在这里错过了一些设计概念吗?java.lang.NullPointerExceptionsuper(capacity,fair,col)