2010-11-24 5 views
0

私はこのコードを持っています。基本的には、どのようなタイプの在庫も取れるはずです。この在庫から、オブジェクトを含むあらゆるタイプのコレクションに購入することができます。javaのコレクション

私はこれを持っています。基本的に私は弦の在庫在庫を持っており、この弦の在庫在庫を一組のオブジェクトに買いたいと思っています。しかし、私はこのエラーが発生します。

アドオン(#880のをキャプチャ?)のjava.util.Collectionに(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<?>

EDIT使用していました:

また、これにあなたのメインを変更します。

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

は、あなたはそれが、彼が望んでいるのですか?彼は購入するためにセットを渡しています。この場合、Tは文字列です。 – Falmarri

+0

うーん、私は間違っているかもしれません。私はこれを考えてみましょう。 –

+0

私は正しかった、それは彼が望むものです。彼はコレクションにTを追加できません。コンパイラが不平を言っていること –

0

Collection<?>にはどのような種類のオブジェクトも含めることができ、T?タイプのサブタイプではない可能性があります。たとえば、を渡すことができます。がStringの場合、明らかにitems.add(e)を実行できません。あなたはTを追加するために常に有効であるようにCollectionTのスーパータイプを保持していることを確認して、そのような何かをしようとする必要が

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

ああ、それを考えていたはずです!ありがとう...だれでもアイテムのコレクションを反復する方法を知っていますか? (?e:items用)は動作しません。 – Jake

+0

@Jake: '?スーパーTは任意のスーパータイプである可能性があります。特定の型を想定することはできません。したがって、できることは 'for(Object e:items)'です。 – casablanca

関連する問題