Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Передать в метод arrayList

#java #arraylist


есть три arrayList:

private ArrayList clothes = new ArrayList<>();
private ArrayList computers = new ArrayList<>();
private ArrayList smartphones = new ArrayList<>();


есть switch который в зависимости от выбранного передает в метод arraList:

switch (checkInt()) {
        case 1:
            searchName(clothes);
            break;
        case 2:
            searchName(computers);
            break;
        case 3:
            searchName(smartphones);
            break;}


собственно вопрос: как метод searchName должен принимать arrayList

searchName(???????????????){
}

    


Ответы

Ответ 1



Максим, сразу бросилось в глаза, что у вас тип переменно класс, а не интерфейс. Best практика советует использовать как раз-таки интерфейс, например: private List clothes = new ArrayList<>(); private List computers = new ArrayList<>(); private List smartphones = new ArrayList<>(); Касательно Вашего вопроса, можно использовать generic методологию: public void searchName(List list) В вопросе неизвестно являются ли классы Clothes, Computer и Smartphone наследниками какого-то другого класса или интерфейса. Если бы они таки являлись, например: interface Goods { int price(); int name(); int amount(); } class Clothes implements Goods { ... } class Computer implements Goods { ... } То в таком виде код бы стал более лаконичным: Инициализация: private static List clothes = new ArrayList<>(); private static List computers = new ArrayList<>(); Наполнение: clothes.add(new Clothes()); computers.add(new Computers()); Метод остался бы унифицированным: public void searchName(List list) { for (Goods entity : list) { System.out.println(entity.price()); } } А вызов метода одинаковый для каждой из коллекций: searchName(clothes); searchName(computers); В худшем случае в варианте с generics можно будет определять какой именно объект пришел, используя instanceof оператор.

Ответ 2



Передать вот так: searchName(ArrayList objects){ } Но Вам же нужно организовать поиск в этих массивах?! Тогда вам нужно определить один интерфейс для всех этих классов. Назовем его, например Searchable. В нем опишем функцию getName(). тогда можно будет передавать в функцию параметры так: Searchable searchName(ArrayList searchableList){ for (Searchable element in searchableList){ if(element.getName() == "My some name") return element; } }

Комментариев нет:

Отправить комментарий