В чем преимущество использования нескольких исключений в одном блоке перехвата? - PullRequest
9 голосов
/ 25 августа 2011

Мы все слышали, что в Java 7 мы можем написать:

try {
   //something with files and IO
} catch (FileNotFoundException | IOException ex) {
    ex.printStackTrace();
    System.out.println("It's can't copy file");
}

вместо

try {
   //something with files and IO
} catch (FileNotFoundException wx) {
    ex.printStackTrace();
} catch (IOException ex) {
   ex.printStackTrace();
}

но что это действительно хорошо, кроме более короткого кода?
Даже если мы хотим, чтобы в каждом блоке catch выполнялись одни и те же операции, мы можем:

  1. только перехватывает IOException, поскольку FileNotFoundException является подтипом.
    или
  2. если одно исключение не является подтипом другого, мы можем написать некоторый метод handleException () и вызвать его в каждом блоке перехвата.

Итак, эта функция используется только для более чистого кода или для чего-то еще?

Спасибо.

Ответы [ 5 ]

10 голосов
/ 25 августа 2011

Это не для того, чтобы код выглядел чище и для сохранения нажатий клавиш.Это дополнительные преимущества.

Повторение приводит к несогласованности и ошибкам.Таким образом, создавая синтаксис, который делает ненужным повторение, можно избежать реальных ошибок.В этом и состоит мотив DRY, а не красивый код, который быстрее писать.

2 голосов
/ 25 августа 2011

Да, это в первую очередь для более чистого кода.

1 голос
/ 25 августа 2011

Чем короче код, тем меньше кода для обслуживания - это не такое маленькое преимущество.Да, я могу написать метод обработки исключений, но теперь я делаю это не так часто, например, только когда исключение выдается в разных местах кода.

1 голос
/ 25 августа 2011

Это для более чистого кода ... но это очень ценно. В некоторых случаях вы можете создать 4 или 5 исключений, и если все, что вы хотите сделать, - это то же самое во всех случаях, что часто бывает, что сокращает объем кода.

Это делает его более читаемым, а также лучше тестируемым. Это само по себе достаточно ценно.

1 голос
/ 25 августа 2011

Эта идея эквивалентна разнице между:

if (myVar == true && myOtherVar == false)
    // Logic

И

if (myVar == true)
{
    if (myOtherVar == false)
        // Same logic
}

Это просто короче, более чистый код.

...