Shop
タイプのアイテムのコレクションを維持するクラスが与えられT
ます。単一または複数のアイテムの売買機能を提供し、List<T>
売買のコンテナとしてを使用します。
import java.util.*;
public class Shop<T> {
List<T> stock;
public Shop() { stock = new LinkedList<T>(); }
public T buy() {
return stock.remove(0);
}
void sell(T item) {
stock.add(item);
}
void buy(int n, List<T> items) {
for (T e : stock.subList(0, n)) {
items.add(e);
}
for (int i=0; i<n; ++i) stock.remove(0);
}
void sell(List<T> items) {
for (T e : items) {
stock.add(e);
}
}
}
今、私はこのクラスを変更して、あらゆるCollection
タイプのアイテムを売買できるようにする必要があります...だけではありませんList
。私は、ほとんどすべてをコメントアウトし、stock
:から始めて、物事を1つずつ変換しようとすることから始めると考えました。
public class Shop<T> {
// List<T> stock;
Collection<T> stock;
// public Shop() { stock = new LinkedList<T>(); }
public Shop() { stock = new Collection<T>(); }
...
...
}
最初の宣言は機能しますが、コンストラクターでインターフェイスをインスタンス化しようとしても、期待どおりに機能しません。しかし、私が知る限り、それを処理する他の関数で任意のサブタイプを使用できるようにstock
する必要があります。そして、この場合、タイプパラメータとしてワイルドカードを使用することはできないと確信しています。では、ここを構築するために正確に何ができるでしょうか...または、そもそも別の方法で宣言する必要がありますか?Collection
Collection
stock
stock