Как добавить несколько классов в универсальный ArrayList? - PullRequest
0 голосов
/ 25 мая 2019

Я выполняю задание, в котором я могу добавить только определенные классы в общий 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 Ответ

1 голос
/ 26 мая 2019

Ваша основная проблема в том, что вы испортили проверку isinstance. Этот метод работает в обратном порядке; то, что вы ищете:

ComputerPart.class.isInstance(t), а не t.getClass().isInstance(ComputerPart.class). Но вы можете написать это гораздо проще: t instanceof ComputerPart.

Во-вторых, ты испортил систему. Предположительно, вы подразумевали, что каждое «если» в вашем коде должно быть «иначе, если» вместо этого, за исключением первого, конечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...