Я заметил, что методы в некоторых сложных библиотеках, включая стандартный JDK, имеют тенденцию к throws
восходящему преобразованию исключений. Сначала я нашел это явление в исходном коде Apache POI, позже снова увидел его в java.io.FileWriter
вот так:
public FileWriter(String fileName) throws IOException {
super(new FileOutputStream(fileName));
}
где создание экземпляра FileOutputStream
объявляет единственное проверенное исключение FileNotFoundException
в этом стеке вызовов. Однако объявлен IOException
, который является надклассом FileNotFoundException
.
Так в чем причина этого? Или это просто зависит от привычки программиста?
FileWriter
выдает более общее исключение, чем его единственный вызовFileOutputStream
. - person luk2302   schedule 31.07.2017FileOutputStream(String)
было объявлено как бросающееIOException
. Следовательно,FileWriter(String)
, который использовал этот конструктор, также должен был быть объявлен как выбрасывающийIOException
. ВпоследствииFileOutputStream
(но неFileWriter
) был изменен, чтобы выдать более конкретныйFileNotFoundException
, но затем Javadoc был изменен, чтобы читать выбрасывает FileNotFoundException, если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан, или не может быть открыт по какой-либо другой причине. Мне кажется, что это вводящее в заблуждение исключение. - person Klitos Kyriacou   schedule 31.07.2017