2010-11-24 52 views
0

所以我有這個代碼。基本上它應該能夠獲得任何類型的股票,並且您應該能夠從該股票中購買任何類型的集合,包括對象。java收藏

對於主要功能,我有這個。基本上我有一個字符串的庫存清單,我想購買形成這個庫存的字符串到一組對象。但是,我得到這個錯誤。

在java.util.Collection中添加(捕獲#880?)不能適用於(T)

import java.util.*; 

public class lab6 { 

    public static void main(String[] args) { 
    Shop<String> turkey= new Shop<String>(); 
    turkey.sell("pork"); 
    turkey.sell("chicken"); 
    turkey.print(); 
    Set<Object> possessions= new HashSet<Object>(); 
    turkey.buy(2,possessions); 
     for(String e:possessions) 
     System.out.println(e); 

    } 
} 

那麼這就是類文件。

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, Collection<?> items) { 

     for (T e : stock.subList(0, n)) { 
      items.add(e); 
     } 
     for (int i=0; i<n; ++i) stock.remove(0); 

    } 
} 

回答

0

這個替換您buy方法:

void buy(int n, Collection<T> items) { 

    for (T e : stock.subList(0, n)) { 
     items.add(e); 
    } 
    for (int i=0; i<n; ++i) stock.remove(0); 

} 

您使用Collection<?>

編輯:

而且改變你的主這樣的:

public static void main(final String[] args) { 
    final Shop<String> turkey = new Shop<String>(); 
    turkey.sell("pork"); 
    turkey.sell("chicken"); 
    turkey.print(); 
    final Set<String> possessions = new HashSet<String>(); 
    turkey.buy(2, possessions); 
    for (final String e : possessions) { 
     System.out.println(e); 
    } 
} 

並在Shop中寫入print()方法。

+0

你確定這就是他想要什麼?他通過Set 購買,在這種情況下T是一個字符串。 – Falmarri 2010-11-24 00:40:25

+0

嗯,我可能是錯的。讓我考慮一下。 – 2010-11-24 00:41:13

0

這裏的問題是Collection<?>可以包含任何類型的對象,並且T可能不是?類型的子類型。例如,您可以通過Collection<Integer>,如果TString,則顯然您不能執行items.add(e)

你需要確保的是,Collection持有T的超類型,以便它總是有效,以添加T,所以你可以試試:

void buy(int n, Collection<? super T> items)