Один блок try catch для нескольких элементов в массиве

1

У меня есть этот код, который должен генерировать другое исключение с каждым экземпляром.

Vehicle[] parkingLot = new Vehicle[5];
    try
    {
        // NEGATIVE INPUT
        parkingLot[0] = new Truck(1200.0, 2000, "Chevrolet", -8, new Person());
        // NULL MANUFACTURER
        parkingLot[1] = new Vehicle("", 8, new Person("John"));
        // NULL OWNER NAME
        parkingLot[2] = new Vehicle("Mitsubishi", 6, new Person(""));
        // TOW CAPACITY OVER 1500
        parkingLot[3] = new Truck(1700.0, 1000, "Nissan", 6, new Person("Joe"));
        // LOAD CAPACITY OVER 8600
        parkingLot[4] = new Truck(1200.0, 9000, "Nissan", 6, new Person("Frank"));
    }
    catch(Exception e)
    {
        System.out.println(e.getMessage());
    }

Поскольку значения, которые я использую для создания этих объектов, жестко закодированы, я не могу использовать цикл с чем-то вроде

parkingLot[index]

Итак, как я должен разработать свой код, чтобы, когда один экземпляр создает исключение, все еще предпринимаются попытки создать экземпляр остальных объектов?

  • 0
    Честно говоря, самый простой способ - просто поставить отдельный блок try ... catch вокруг каждого. Помимо этого, вам нужно будет найти способ как-то параметризовать ваши конструкции, чтобы вы могли зацикливаться на чем-то. Почему бы вам не проверить "Образец строителя" ? Затем вы можете создать массив компоновщиков (с вашими жестко запрограммированными значениями), которые никогда не будут генерировать исключения, а затем перебрать эти компоновщики для создания экземпляров реальных объектов. В любом случае это кажется хорошим случаем, поскольку ваши конструкторы начинают принимать много параметров.
  • 0
    Оберните каждое задание в отдельную попытку. Это не будет красиво, но пока вы не выполните рефакторинг, чтобы конструкторы не генерировали исключения, ваш код не станет намного красивее.
Показать ещё 1 комментарий
Теги:

1 ответ

1

Я думаю, что правильное решение - использовать отдельные попытки... блокировать блоки. НО только для вызова этот код (java 8) может делать то, что вы хотели:

Callable[] initializers = {
    // NEGATIVE INPUT
    () -> parkingLot[0] = new Truck(1200.0, 2000, "Chevrolet", -8, new Person()),
    // NULL MANUFACTURER
    () -> parkingLot[1] = new Vehicle("", 8, new Person("John")),
    // NULL OWNER NAME
    () -> parkingLot[2] = new Vehicle("Mitsubishi", 6, new Person("")),
    // TOW CAPACITY OVER 1500
    () -> parkingLot[3] = new Truck(1700.0, 1000, "Nissan", 6, new Person("Joe")),
    // LOAD CAPACITY OVER 8600
    () -> parkingLot[4] = new Truck(1200.0, 9000, "Nissan", 6, new Person("Frank"))
};

for (Callable i : initializers) {
    try {
        i.call();
    } catch (Exception ex) {
        System.out.println(e.getMessage());
    }
}
  • 0
    +1 Эй, это круто.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню