首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当队列类型包含泛型时,毒害阻塞队列

当队列类型包含泛型时,毒害阻塞队列
EN

Stack Overflow用户
提问于 2015-07-13 13:19:49
回答 3查看 531关注 0票数 0

我有一个类型,MyType<T>,它包含一个泛型类型T。我有一个BlockingQueue<MyType<T>>类型的阻塞队列。我想向队列发送“终止流”标记,即毒丸,但问题是,由于一般类型,我无法实例化毒丸。有办法绕道吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-13 13:33:52

你应该能创造一个。

代码语言:javascript
复制
class MyType<T> {


    private BlockingQueue<MyType<T>> q = new ArrayBlockingQueue<>(10);
    // Poison pill to signal the end of the queue.
    public static final MyType<?> PILL = new MyType<>();

    /**
     * Special private constructor for PILL creation.
     */
    private MyType() {

    }

    public boolean queueClosed() {
        return q.peek() == PILL;
    }
}

如果您有自己的构造函数,则可以添加没有参数的private构造函数。

票数 2
EN

Stack Overflow用户

发布于 2015-07-13 13:36:12

您仍然可以创建泛型对象并直接转换它。例如,查看java.util.Collections.emptyList():

代码语言:javascript
复制
@SuppressWarnings("unchecked")
public static final List EMPTY_LIST = new EmptyList<Object>();

@SuppressWarnings("unchecked")
public static final <T> List<T>  emptyList() {
    return (List<T>) EMPTY_LIST;
}

只需确保流结束标记处理不使用/不依赖

票数 1
EN

Stack Overflow用户

发布于 2015-07-13 13:33:32

如果没有看到代码,就很难找到正确的解决方案。我能想到的是:

  • MyType添加一种方法,表明这是一种毒丸。
  • 创建一个空的PoisonPill标记接口,并向MyType添加一个getPoison()静态方法,该方法返回一个MyType implements PoisonPill,然后使用instanceof进行测试。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31384529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档