私はこれまでこのようなことを書いたことがないので、誰かに私がこれを正しくやっているかどうかを教えてもらえることを願っています。したがって、VectorのサブクラスであるProcessQueueという名前のクラスと、空のキューを定義するコンストラクターを作成する必要があります。また、ベクターは「オブジェクト」タイプのアイテムを保持します。だからここにある...
public class ProcessQueue<Vector>{
ProcessQueue(){}
}
私はこれまでこのようなことを書いたことがないので、誰かに私がこれを正しくやっているかどうかを教えてもらえることを願っています。したがって、VectorのサブクラスであるProcessQueueという名前のクラスと、空のキューを定義するコンストラクターを作成する必要があります。また、ベクターは「オブジェクト」タイプのアイテムを保持します。だからここにある...
public class ProcessQueue<Vector>{
ProcessQueue(){}
}
いいえ、そうではありません。それは一般的であり、拡張されていません。
その上、それは良い考えではありません。ProcessQueue
その下にある種のコレクションがあるかもしれませんが、拡張する必要はありません。継承より合成を優先します。
何かを実装する必要がある場合は、実際にQueue
. 予期される特定の動作があります。あなたのものがそれに準拠していることを確認してください。最善の方法は、それを強制するインターフェースを実装することです。
public class ProcessQueue<T> implements Queue<T> {
// Have a private collection of some sort that provides the behavior that the interface requires
}
Vector
どこにも拡張していません。コードを次のように変更します。
public class ProcessQueue<T> extends Vector<T> {
}
ちなみに、私はあなたがVector
まったく使用することをお勧めしません. Java Vector クラスが廃止または非推奨と見なされる理由を確認してください。. IMOこれを行う必要がある場合は、拡張する方がよいでしょうArrayList
。
public class ProcessQueue<T> extends ArrayList<T> {
}
そして、あなたのコードでは次を使用しますList
:
List<SomeClass> lstQueue = new ProcessQueue<SomeClass>();
U̶n̶r̶e̶l̶a̶t̶e̶d̶ ̶t̶o̶ ̶t̶h̶e̶ ̶o̶r̶i̶g̶i̶n̶a̶l̶ ̶q̶u̶e̶s̶t̶i̶o̶n̶ duffymo と同様に、必須になるまで Java Collection クラスを拡張しないでください。ほぼすべての種類の一般的なコレクションを保持するためのクラスがたくさんあることに注意してください。実際の作業に役立つ可能性がQueue
あります。PriorityQueue
最良の解決策は、duffymo が指摘するように、Java コレクションを拡張する代わりに構成することです。
public class ProcessQueue<T> {
private List<T> data = new ArrayList<T>();
//rest of code...
}
Queue
または、 やなどのインターフェイスの新しい実装を作成しますList
。
public class ProcessQueue<T> implements Queue<T> {
//Queue interface methods implementation...
}