キューの先頭と末尾で個別のロックを使用する配列に関して、同時循環キューを実装しています。キュー内の各ノードは次のようになります。
private class Node<T>
{
public T item;
ReentrantLock lock = new ReentrantLock();
Node(){}
void lock() {lock.lock();}
void unlock() {lock.unlock();}
}
キュー クラスのコンストラクタでキューを作成できません。
public Queue(int capacity) {
items = (Node[]) new Object[capacity];//This line gives the problem
head = size = 0;
}
ここで解決策を見つけましたが、このコード:
@SuppressWarnings("unchecked")
Node<T>[] slots = (Node<T>[]) new Node<?>[capacity];
次のコンパイラ エラーが発生します。
Cannot create a generic array of Queue<T>.Node<?>
私の質問は、汎用オブジェクトの配列を初期化する正しい方法は何ですか?