Java通配符-简单生产者-消费者

Java通配符-简单生产者-消费者,java,generics,Java,Generics,我目前正在实现一个需要使用通配符的问题,并使用通配符创建一个非常简单的生产者/消费者类。下面给出了这个问题,并使用了一个泛型类型T的列表。我甚至不知道从哪里开始这个问题。我对通配符很不熟悉,希望你们能提供任何帮助或提示来引导我朝着正确的方向前进!我已将问题包括在下面 通配符。下面是一个维护 类型为T的对象。有两个销售功能:一个用于销售T类型的单个项目,另一个用于销售列表中的所有项目。有两种购买方法:一种是购买类型为T的单个项目,另一种是一次购买n个项目,添加到作为buy函数参数提供的列表集合中

我目前正在实现一个需要使用通配符的问题,并使用通配符创建一个非常简单的生产者/消费者类。下面给出了这个问题,并使用了一个泛型类型T的列表。我甚至不知道从哪里开始这个问题。我对通配符很不熟悉,希望你们能提供任何帮助或提示来引导我朝着正确的方向前进!我已将问题包括在下面

通配符。下面是一个维护 类型为
T
的对象。有两个销售功能:一个用于销售
T
类型的单个项目,另一个用于销售
列表中的所有项目。有两种购买方法:一种是购买类型为
T
的单个项目,另一种是一次购买n个项目,添加到作为buy函数参数提供的
列表
集合中

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);
        }
    }
}
import java.util.*;
公营商店{
上市股票;
公共商店({
股票=新的LinkedList();
}
公众不买{
退库。删除(0);
}
无效销售(T项){
增加库存(项目);
}
无效购买(整数n,列出项目){
for(te:stock.subList(0,n)){
增加(e)项;
}

对于(int i=0;i在这种特殊情况下,要求您修改签名
void buy(int n,List itmes)
void sell(List items)
,以便在类型上具有更好的灵活性

首先,要求您允许使用任何集合。对于此任务,如果您将两个签名都更改为接受
collection
,而不是
List
,就足够了

第二部分涉及通配符。让我们先看看问题:

假设我们实例化一个
商店
,想买一些狗

Shop<Dog> dogShop = ...
List<Animal> myAnimals = ...
dogShop.buy(3, myAnimals); // **TYPE ERROR**

这允许我们传递任何超类型的
T
集合。在我们的示例中,您可以传递
列表

查看,以便将集合添加到列表中。老实说,这是我见过的最懒惰的问题。不要试图掩盖这是家庭作业的事实,也不要试图解释您遇到的问题。我不会给您任何分数,而且可能会上帝保佑你的灵魂。对不起,KyleM,这只是这次作业中3个问题中的一个,这是我唯一不知道从哪里开始的问题。谢谢Darkhogg!我是Java集合的新手,所以这是一个很好的开始。
void buy(int n, Collection<? super T>) { /*...*/ }
Shop<Animal> animalShop = ...
Set<Cat> myCats = ...
animalShop.sell(myCats); // **TYPE ERROR**
void sell(Collection<? extends T> items) { /* ... */ }