Существует еще одна опция, если обработка метода исключений не требуется в методе getContents
- добавьте в метод предложение throws
, чтобы метод вызывал исключение:
public static String getContents (File file)
throws IOException, FileNotFoundException {
Таким образом, код, вызывающий метод, будет обрабатывать Exception
s, а не сам метод. В этом методе не будет необходимости в try
/ catch
блоках, если Exception
s выбрасывается в методы, которые его вызвали.
Это может или не может быть желательным способом справиться с ситуацией, в зависимости от того, как метод должен вести себя.
Редактировать
Подумав, метод может вызвать исключение. Я думаю, что комментарий Д. Шоули, я думаю, хорошо подытоживает его: «обработка исключений должна означать обработку исключений только там, где это имеет смысл».
В этом случае появляется метод getContents
, который получает содержимое указанного File
и возвращает вызывающему String
.
Если обработка исключения должна была быть выполнена в методе getConents
, единственный способ сообщить о том, что произошла ошибка, - это вернуть некое предварительно определенное значение, такое как null
, вызывающей стороне, чтобы сообщить, что произошла ошибка.
Однако, если сам метод возвращает исключение вызывающей стороне, вызывающая сторона может выбрать соответствующую реакцию:
try {
String contents = getContents(new File("input.file"));
} catch (IOException ioe) {
// Perform exception handling for IOException.
} catch (FileNotFoundException fnfe) {
// Inform user that file was not found.
// Perhaps prompt the user for an alternate file name and try again?
}
Вместо того, чтобы метод setContents
придумал собственный протокол для уведомления о том, что произошла ошибка, вероятно, было бы лучше выбросить IOException
и FileNotFoundException
обратно в вызывающую функцию, чтобы обработка исключений могла выполняться в месте, где могут выполняться соответствующие альтернативные действия.
Обработка исключений должна выполняться только в том случае, если возможна какая-то значимая обработка.