作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有类X
、类Y
和类Z
。如果X
或Y
执行特定条件,则应将它们放入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/
我是一名优秀的程序员,十分优秀!