¿Tiene algún sentido para declarar un método para producir una excepción y una subclase de esta excepción, por ejemplo, IOException y FileNotFoundException?
Usualmente IDEs más desconocidos Sé incluso de emitir advertencias para tales declaraciones. Lo que puede y debe hacer es documentar las diferentes excepciones arrojadas en Javadoc.
Sin embargo, ¿es posible manejar ambas excepciones si el método arroja solo las más genéricas, es decir, IOException?
Sí, es necesario asegurarse de que los bloques de captura estén en el orden correcto, es decir, más específicos primero.bloques catch se evalúan en el orden en que se definen, por lo que aquí
try {
...
} catch (FileNotFoundException e) {
...
} catch (IOException e) {
...
}
si la excepción lanzada es un FileNotFoundException
, que será capturado por el primer catch
bloque, de lo contrario se caerá a la segunda y tratados como una general IOException
. El orden opuesto no funcionaría ya que catch (IOException e)
capturaría todos IOException
s incluyendo FileNotFoundException
. (. De hecho, este último como resultado una IIRC error de compilación)
Tienes razón que no es limpio - pero no es necesario, ya sea. Ver mi respuesta y la de Karthik. Básicamente no hay necesidad de tener esta fealdad. –
@Jon si declaramos que el método arroja IOException, ¿cómo podría saber la persona que llama que también puede generar FileNotFoundException? –
No es "también": una excepción FileNotFoundException * es * una IOException, por lo que siempre puede tratar de atraparla si el método declara que arroja IOException. Depende de la documentación especificar en qué circunstancias ocurre. –