Хотя ответ jtahlborn верен, есть еще одно признание: компилятор увидит, что вы генерируете исключение универсального типа (даже если во время выполнения это может быть только определенный класс), и заставит вас объявитьуниверсальное исключение в заголовке метода.
private void test() throws FileNotFoundException {
try {
throw new FileNotFoundException("Es una exception");
} catch (IOException e) {
throw e; <-- Error because the method only throws
FileNotFoundException, not IOException
}
}
e
действительно является FileNotFoundException, но, поскольку оно объявлено как IOException, компилятор работает с более широким классом.То, что вы можете сделать, это «вызвать» исключение.
throw (FileNotFoundException) e;