java - 如何让BlockingQueue接受多种类型?

标签 java generics blockingqueue

我有类X、类Y和类Z。如果XY执行特定条件,则应将它们放入BlockingQueue中。 Z 类只是从队列中取出它们。

我知道创建这样的东西:

BlockingQueue<X,Y> BQueue=new ArrayBlockingQueue<X,Y>(length);

是非法的。如何正确制作?

最佳答案

您可以按照 Sasha 的建议进行操作并使用 BlockingQueue<Object>但我更喜欢将通用功能声明到接口(interface)中,然后让每个类处理它自己的功能,而不是使用 instanceof声明:

public interface Common {

    boolean shouldEnqueue();

    void doSomething();

}

public class X implements Common {

    public boolean shouldEnqueue() {
        ...
    }

    public void doSomething() {
        System.out.println("This is X");
    }
}

public class Y implements Common {

    public boolean shouldEnqueue() {
        ...
    }

    public void doSomething() {
        System.out.println("This is Y");
    }
}

public class Producer {

    private final BlockingQueue<Common> queue;

    void maybeEnqueue(Common c) {
        if(c.shouldEnqueue()) {
            queue.add(c);
        }
    }
}

public class Consumer {
    private final BlockingQueue<Common> queue;

    void doSomething() {
        queue.take().doSomething();
    }
}

关于java - 如何让BlockingQueue接受多种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185118/

相关文章:

java - Flask REST POST 请求根据 json 长度失败 "Bad Request"

java - SwingWorker process() GUI 更新困难与合并 block

java - 是否可以从 Microsoft word 文档中导入数据?

javascript - Spring Security 阻止 js post 查询文件上传

Java,阻塞队列

Java:获取泛型的实例

c# - 什么时候在 C# 中使用字典?

java - 如何将具有整数值的条目添加到 Map<String, ?>

java - 使用以 BlockingQueue<Runnable> 作为参数的构造函数创建的 ThreadPoolExecutor 如何将 Callables 排入队列?

java - 从 ExecutorService 访问队列 (LinkedBlockingQueue) 的正确方法