Как заполнить список разными объектами?

348
22 сентября 2017, 18:31

Есть метод, который заполняет список одним объектом какое-то количество раз. А как сделать чтобы заполнялись разные объекты ? Вот объекты:

        Order order1 = new Order(001, 10, "order1", "itemName1", "1");
        Order order2 = new Order(002, 20, "order2", "itemName2", "2");
        Order order3 = new Order(003, 30, "order3", "itemName3", "3");
//Вот метод:
public ArrayList<Order> useList(Order order, ArrayList list)throws Exception{
        if (order == null)
            throw new Exception("Order " + order.getId() + " does not exist");
        for (int i = 0; i <= 4; i++) {
            list.add(order);
        }
        return list;
    }
Answer 1

Этот фрагмент вызовет NullPointerException при вызове order.getId(), если order == null:

if (order == null)
        throw new Exception("Order " + order.getId() + " does not exist");

Обычно при проверке входных аргументов на корректность (неравенство null в том числе) не выбрасывают проверяемые исключения - используют непроверяемые (чаще всего это IllegalArgumentException, NullPointerException или собственные).
Также небольшие замечания/рекомендации:
1. В методе вы модифицируете переданную коллекцию - нет необходимости возвращать ее обратно.
2. Используйте интерфейсы (методу все равно какую именно из реализаций List заполнять и вы сможете передавать любую).

public static void useList(List<Order> list, Order[] orders) {
    Objects.requireNonNull(list); //throw NullPointerException если list == null
    Objects.requireNonNull(orders); //throw NullPointerException если orders == null
    list.addAll(asList(orders));
}
public static void main(String[] args) {
    Order order1 = new Order(001, 10, "order1", "itemName1", "1");
    Order order2 = new Order(002, 20, "order2", "itemName2", "2");
    Order order3 = new Order(003, 30, "order3", "itemName3", "3");
    List<Order> list = new ArrayList<>();
    useList(list, new Order[] {order1, order2, order3});
    System.out.println(list);
}
Answer 2

Наверное вам нужно что-то в этом роде (аргумент будет массивом):

public List<Order> useList(List<Order> list, Order... order) throws Exception{
    if (order == null)
        throw new Exception("Order " + order.getId() + " does not exist");
    for (int i = 0; i <= order.length; i++) {
        list.add(order[i]);
    }
    return list;
}

Теперь можно использовать метод так:

Order order1 = new Order(001, 10, "order1", "itemName1", "1");
Order order2 = new Order(002, 20, "order2", "itemName2", "2");
Order order3 = new Order(003, 30, "order3", "itemName3", "3");
useList(new ArrayList<>());
useList(new ArrayList<>(), order1);
useList(new ArrayList<>(), order1, order2);
useList(new ArrayList<>(), order1, order2, order3);
useList(new ArrayList<>(), new Order[] {order1, order2, order3});
READ ALSO
Deserialize JSON

Deserialize JSON

Вот это JSON я разбирал так:

283
Выгрузка из Java в Word

Выгрузка из Java в Word

У меня есть приложение на Java + HibernateМне надо формировать отчёты в ворде

239
Чтение KML файла в Java

Чтение KML файла в Java

Есть файл KML, при попытке его считать возникает ошибка при приведении объекта documentFeature класса Feature к типу Placemark, так как Placemark является дочерним...

342
generic-типы (java)

generic-типы (java)

Здравствуйте! Читаю о generic-ах, в качестве примера приводится класс Optional

208