Страницы

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

понедельник, 17 декабря 2018 г.

Передать в метод 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(???????????????){ }


Ответ

Максим,
сразу бросилось в глаза, что у вас тип переменно класс, а не интерфейс. 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 оператор.

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

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