我得到了一個類Shop
,它維護類型爲T
的項目集合。它提供了買入和賣出的單個或多個項目的功能和使用List<T>
作爲容器的買賣:使給定的Java類更具通用性和靈活性
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
開始啓動:
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
?
您可以開始使'Collection'成爲'Collection extends T>'和其他所有使用參數化類型的地方 –
kolossus
但是我怎樣才能構建'stock'?我不能實例化一個'Collection'接口。 – nicole
在運行時,你不會實例化一個'Collection',你的實際容器類可以是任何擴展'Collection'的接口。我在這裏規定的靈活性僅限於容器將包含的內容,這是'T' – kolossus