Pregunta

Estoy construyendo un software científico con muchos cálculos y, por supuesto, los argumentos pueden tener longitudes equivocadas, etc. así que utilicé IllegalArgumentException clase como parecía el nombre correcto para el problema, pero debería poner el throws IllegalArgumentException en la definición de función?

Lo estoy preguntando porque después de escribirlo, el editor de eclipse no me pidió que rodeara la función con intento y atrapar. Pensé que así fue como se hizo cumplir la captura. He leído el tutorial de manejo de excepciones en Java.com, sin embargo, no estoy seguro de haber entendido la parte sobre mi pregunta correcto.

¿Fue útil?

Solución

RuntimeExceptions como IllegalArgumentException se utilizan para indicar errores de programación. El programa en sí rara vez debería poder manejarlo. Alguien necesita solucionar manualmente el código.

Potencial RuntimeExceptionS debe documentarse de alguna manera en el contrato de función (es decir, javadoc), ya sea con el explícito @throws, o mientras describe las entradas. Si no tiene un Javadoc para la función, es posible que desee agregar la cláusula de lanzamiento solo para documentar las posibles dificultades de usar la función, pero en general agregará cláusulas para las excepciones de tiempo de ejecución.

Si dar una longitud incorrecta no es en realidad un error de programación, pero es una situación de excepción, crearía una nueva excepción verificada (como BadLengthError). Si no es una situación excepcional, no use excepciones para el control de flujo.

Otros consejos

Hay dos tipos de excepciones:

Las excepciones de tiempo de ejecución (como ilegalargumentException y nullpointerexception, por ejemplo) no necesitan ser atrapados explícitamente, porque "no deberían suceder". Cuando lo hacen, por supuesto, debes manejarlos en algún lugar.

Se deben atrapar o declarar que representan un tipo de error más intrínsecamente intrínsecamente difícil.

Debe leer sobre excepciones sin control: excepciones que heredan de RuntimeException. No necesitan ser declarados en el encabezado del método.

http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

El último párrafo lo resume:

Si se puede esperar razonablemente que un cliente se recupere de una excepción, haz que sea una excepción verificada. Si un cliente no puede hacer nada para recuperarse de la excepción, haz que sea una excepción sin control.

IllegalArgumentException (junto con otros, por ejemplo NullPointerException) son ejemplos de un RuntimeException. Este tipo de excepción no es lo que se conoce como un Excepción verificada. Java requiere que los métodos declaren qué excepciones verificadas que lanzan y que si un método llamado podría lanzar una excepción verificada, el método de llamadas debería declarar que lanza la excepción en sí, o atraparlo y manejarlo.

Como tal, mi recomendación concreta sería no, no la declare. Ciertamente, sin embargo, no quieres atraparlo. En la mayoría de los casos, tampoco quieres lanzarlo a no ser que esto es inesperado comportamiento. Si es bastante normal y razonable que el método obtenga un valor que no le gusta, una excepción es la forma incorrecta de manejarlo.

También es posible que desee considerar hacer uso de afirmaciones.

El primer punto al comprender las excepciones es que son para situaciones excepcionales. Al pensar en su método, debe preguntar: "¿Debería este método una excepción si se pasa un valor excepcional?" Si la respuesta es "sí", póngala en su declaración de método. No sé si entiendes la idea, pero es un poco simple. Es solo una cuestión de práctica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top