如何限制类在Java中使用某些类型?

时间:2015-03-12 13:31:45

标签: java generics

我有一个基类Product,它有五个子类(ComputerPart,Peripheral,Service,Cheese,Fruit)。这些中的每一个还具有2/3子类。

然后我有一个GenericOrder类,它充当Product类中任意数量对象的集合。 GenericOrder有一个名为ComputerOrder的子类,允许ComputerPartPeripheralService添加到订单中。我花了很多时间试图解决这个问题,但无法得到合理的答案。请帮忙。这是我对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
}

任何人都将非常感谢.....

干杯

1 个答案:

答案 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接口。