我刚刚在研究 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.NullPointerException
super(capacity,fair,col)