gpt4 book ai didi

Java ArrayBlockingQueue 设计

转载 作者:行者123 更新时间:2023-11-30 04:46:47 25 4
gpt4 key购买 nike

我刚刚在研究 JDK 1.6 时发现ArrayBlockingQueue - 构造函数调用了公共(public)可重写方法之一!我认为这对于 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 ,并添加一些状态并覆盖 add() ,我很快就得到了 java.lang.NullPointerException 当我调用 super(capacity,fair,col) 构造函数时。我在这里缺少一些设计概念吗?

最佳答案

这并不是什么不寻常的事情;本质上,您可以将其视为行的单行语法

ArrayBlockingQueue<E> queue = new ArrayBlockingQueue<E>(capacity, fair);
queue.addAll(c);

这是可重写的。调用可重写的方法通常不是一个好主意,但在这里它是完全合理的。

但是...也就是说,从 java.utiljava.util.concurrent 扩展任何集合都是一种邪恶。您应该装饰它们,而不是直接扩展它们。

关于Java ArrayBlockingQueue 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10802933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com