我有一個類型MyType<T>
,它包含一個通用類型T
。我有一個BlockingQueue<MyType<T>>
類型的阻塞隊列。我想發送「流尾」標記到隊列中,即毒丸,但問題是我不能實例化毒丸,因爲它是通用類型的。有沒有解決的辦法?當隊列類型包含通用類型時阻塞隊列
0
A
回答
2
您應該可以創建一個。
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
構造函數。
0
沒有看到您的代碼,很難找到正確的解決方案。我能想到的是:
將一種方法添加到
MyType
,表明這是毒丸。創建一個空
PoisonPill
標記接口,並添加一個getPoison()
靜態方法來MyType
返回使用instanceof
一個MyType implements PoisonPill
然後進行測試。
1
您仍然可以創建通用對象並進行投射。例如看java.util.Collections.emptyList():
@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. GCD隊列類型
- 2. Kannel隊列類型
- 3. 非阻塞隊列
- 4. 阻塞隊列Ç
- 5. LinkedTransferQueue是阻塞隊列還是非阻塞隊列?
- 6. 使用默認隊列時,類型不包含方法
- 7. 阻塞隊列不阻塞線程?
- 8. D中的隊列類型?
- 9. 隊列的Haskell類型
- 10. 阻塞隊列實現
- 11. Java中的阻塞隊列
- 12. 測試非阻塞隊列
- 13. Java,被阻塞的隊列
- 14. 隊列阻塞主線程
- 15. 阻塞隊列和InterruptedException
- 16. 阻塞隊列設計
- 17. REST和阻塞隊列
- 18. 單進程阻塞隊列
- 19. GCD - dispatch_async上阻塞隊列
- 20. 更改通用隊列隊列<T>類到非通用隊列類
- 21. 通知(),而不是notifyAll()阻塞隊列
- 22. 如何用類型struct定義雙端隊列(雙面隊列)?
- 23. 僅包含唯一元素的Java阻塞隊列
- 24. 當使用NServiceBus使用Azure隊列時Bus.Send被阻塞
- 25. 運行時崩潰推入隊列時包含指向該類型的隊列的結構
- 26. 使用隊列類型指針
- 27. 隊列名稱使用的類型
- 28. 阻塞隊列使用場景
- 29. gevent隊列如何阻塞和empy隊列,直到項目在隊列中?
- 30. 隊列類型爲「集羣」的集羣中的別名隊列
這並不工作,因爲對構造函數沒有保證。另外,在MyType的每個實例中存儲一個空對象效率不高。 – Max
@Max - 我注意到我的不是'靜態' - 修正了這個問題。更好? – OldCurmudgeon