【发布时间】:2010-12-18 05:02:18
【问题描述】:
我有一个关于 Java 泛型的作业问题。给定的类是 Product.java。它有抽象类 Product,然后 ComputerPart、Peripheral、Fruit、Cheese 和 Service 扩展 Product。
- 仔细研究 Products.java 中的类结构。
- 设计一个名为 GenericOrder 的通用容器,它充当 Products.java 中任意数量对象的集合。设计一种机制,为容器的每个实例提供唯一标识符。根据需要实施尽可能多的方法。您必须使用 Java 泛型功能。
- 设计和实现一个名为 ComputerOrder 的 GenericOrder 子类,它采用任意数量的不同类的 ComputerPart 对象、Peripheral 对象和 Service 对象。根据需要实施尽可能多的方法。
- 设计并实现一个名为 PartyTrayOrder 的 GenericOrder 子类,它采用任意数量的不同类别的 Cheese 对象、Fruit 对象和 Service 对象。根据需要实施尽可能多的方法。
-
设计并实现一个名为 OrderProcessor 的类。您必须至少实现以下方法:
accept; // this method accepts a GenericOrder or any of its subclass objects and stores it in any internal collection of OrderProcessor. process; // this method sorts all accepted orders in the internal collection of GenericOrder into collections of ComputerPart, Peripheral, Cheese, Fruit, and Service. You must associate each object with the unique identifier. You may refer to the TwoTuple.java example in the text book. dispatchXXX; // this method simulates the dispatch of the sorted collections. For example, the method dispatchComputerParts() should produce this output: Motherboard name=Asus, price=$37.5, order number=123456 Motherboard name=Asus, price=$37.5, order number=987654 RAM name=Kingston, size=512, price=$25.0, order number=123456 You may overload each of the above methods as you think necessary. 创建一个客户端类来测试 OrderProcessor。您将需要创建一个数据生成器用于测试目的。这不是强制性的,但您可以使用 TIJ 第 637 至 638 页中的数据生成器的变体。
- 将上述代码打包成一个 zip 文件并发送给您的导师。
我已经完成了第 1 个要求,但我无法理解第 2 个要求。这是我做的代码:
public class GenericOrder<T> {
private static long counter = 1;
private final long id = counter++;
private List<T> products;
private T theClass;
public GenericOrder()
{
products = new ArrayList<T>();
}
public long getId() {
return id;
}
public void addProduct(T newProduct) {
products.add(newProduct);
}
public int getNumberOfProducts() {
return products.size();
}
public List<T> getProducts()
{
return products;
}
public void setProducts(List<T> products)
{
this.products = products;
}
public T get()
{
return theClass;
}
public void set(T theClass)
{
this.theClass = theClass;
}
}
public class ComputerOrder<T> extends GenericOrder<T> {
private List<T> products;
private T theClass;
public ComputerOrder()
{
products = new ArrayList<T>();
}
public void addProduct(T newProduct) {
products.add(newProduct);
}
public int getNumberOfProducts() {
return products.size();
}
public List<T> getProducts()
{
return products;
}
public void setProducts(List<T> products)
{
this.products = products;
}
public T get()
{
return theClass;
}
public void set(T theClass)
{
this.theClass = theClass;
}
}
请在这里帮助我,看看是否有人比我更了解第二个要求。 谢谢大家。
【问题讨论】: