Я пытался выяснить ответ на этот вопрос, но не получил удовлетворительного объяснения. Вот некоторые предпосылки:Обработка исключений с помощью Java7
Java 7 позволяет нам улавливать несколько исключений в одном блоке catch, если эти исключения из другой иерархии. Например:
try {
// some code
} catch(SQLException | FileNotFoundException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
Но если исключения из той же иерархии, мы должны использовать несколько блоки уловов как:
try {
// some code
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
Но если я пытаюсь написать код, как показано ниже компилятор жалуется, что «Исключение FileNotFoundException
уже пойманы альтернативной IOException
"
try {
// some code
} catch(FileNotFoundException | IOException e) { // compiler error
e.printStackTrace();
}
Теперь мой вопрос: Почему компилятор выдает сообщение об ошибке в последнем случае, не может это цифра что FileNotFoundException
- специальный случай IOException
? Это сохранит дублирование кода, когда моя логика обработки исключений будет такой же.
Если вы работаете с 'IOException', то не нужно использовать тот же блок обработчика для' FileNotFoundException' –