我有一个基类Product,它有五个子类(ComputerPart,Peripheral,Service,Cheese,Fruit)。这些中的每一个还具有2/3子类。
然后我有一个GenericOrder
类,它充当Product类中任意数量对象的集合。 GenericOrder
有一个名为ComputerOrder
的子类,仅允许ComputerPart
,Peripheral
和Service
添加到订单中。我花了很多时间试图解决这个问题,但无法得到合理的答案。请帮忙。这是我对GenericOrder
的所作所为:
public class GenericOrder<T>{
private static long counter=1;
private final long orderID = counter++;
private List<T> orderItems;
public GenericOrder(){
orderItems = new ArrayList<T>();
}
// and so on with another constructor and add, get and set methods.
}
class ComputerOrder<T> extends GenericOrder{
//need help here
}
任何人都将非常感谢.....
干杯
答案 0 :(得分:3)
我想你想要这样的东西:
GenericOrder:
public class GenericOrder<T> {
private List<T> orderItems;
public GenericOrder() {
orderItems = new ArrayList<T>();
}
public void add(T item) {
orderItems.add(item);
}
}
让我们定义一个接口,它将是ComputerOrder允许的唯一类型:
public interface AllowableType {
}
ComputerOrder:
public class ComputerOrder extends GenericOrder<AllowableType> {
}
产品类别和家庭:
public class Product {
}
public class ComputerPart extends Product implements AllowableType {
}
public class Peripheral extends Product implements AllowableType {
}
public class Service extends Product implements AllowableType {
}
public class Cheese extends Product {
}
public class Fruit extends Product {
}
现在测试一下:
public void test() {
ComputerOrder co = new ComputerOrder();
co.add(new ComputerPart()); //ok
co.add(new Peripheral()); //ok
co.add(new Service()); //ok
co.add(new Cheese()); //compilation error
co.add(new Fruit()); //compilation error
}
如果我们希望某个特定类型可以添加到ComputerOrder
,我们只需要使该类型实现AllowableType
接口。