如何将多个类添加到通用ArrayList?

时间:2019-05-25 20:59:24

标签: java generics arraylist

我正在做一个分配,其中我只能将特定的类添加到通用ArrayList中,但是ArrayList似乎并未按预期添加类。

public class ComputerOrder<T extends Product> extends GenericOrder<T> {
private List<T> products;//the list of items

    public void addProduct(T t) {
        if (t.getClass().isInstance(ComputerPart.class)) {
            products.add(t);    
        }
        if (t.getClass().isInstance(Service.class)) {
            products.add(t);   
        }
        if (t.getClass().isInstance(Peripheral.class)) {
            products.add(t);   
        }
        else System.out.println("Not the right type of object.");
   }

主要参数测试:

public static void main(String[] args) {

    ComputerPart c;
    c = new ComputerPart(12);

    ComputerOrder<Product> g3 = new ComputerOrder<>();
    g3.addProduct(c);
    g3.print();

}

预期结果是ArrayList g3可以添加c,因为它是ComputerPart对象的实例,但是ArrayList为空。有人可以解释我的代码在做什么错吗?

注意:“ else”语句仅用于测试目的,似乎表明if语句不能正常工作,因为它在我测试时不断被触发。

1 个答案:

答案 0 :(得分:1)

您的主要问题是您弄乱了isinstance检查。该方法相反。您正在寻找的是:

ComputerPart.class.isInstance(t),而不是t.getClass().isInstance(ComputerPart.class)。但是,您可以更简单地编写为:t instanceof ComputerPart

第二,您搞砸了整个系统。大概您想将代码中的每个“ if”都改为“ else if”,当然第一个除外。