java - try - throw exception c#
¿Debería poner throws IllegalArgumentException en la función? (5)
Debe leer Excepciones sin marcar: excepciones que heredan de RuntimeException. No necesitan declararse en el encabezado del método.
http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html
El último párrafo lo resume:
Si es razonable esperar que un cliente se recupere de una excepción, conviértalo en una excepción marcada. Si un cliente no puede hacer nada para recuperarse de la excepción, conviértalo en una excepción no verificada.
Estoy construyendo un software científico con muchos cálculos y, por supuesto, los argumentos pueden tener longitudes incorrectas, etc. Así que IllegalArgumentException
clase IllegalArgumentException
porque me pareció el nombre correcto para el problema, pero ¿debería poner los throws IllegalArgumentException
en la definición de la función?
Lo estoy preguntando porque después de que lo escribí, el editor de Eclipse no me pidió que rodeara la función con try y catch. Pensé que así es como se aplicaron try and catch. He leído el tutorial de manejo de excepciones en Java.com pero aún no estoy seguro de entender la parte de mi pregunta.
Hay dos tipos de excepciones:
las excepciones de tiempo de ejecución (como IllegalArgumentException y NullPointerException, por ejemplo) no necesitan ser capturadas explícitamente, porque "no deberían suceder". Cuando lo hacen, por supuesto, necesitas manejarlos en alguna parte.
las excepciones regulares NECESITAN ser atrapadas o declaradas como lanzadas porque representan un tipo de error más intrínsecamente difícil.
el primer punto cuando se comprenden las excepciones es que son para situaciones excepcionales. Al pensar en su método, debe preguntar: "¿Debería este método arrojar una excepción si se pasa un valor excepcional?" Si la respuesta es "sí", póngalo en su declaración de método. No sé si entiendes la idea, pero es algo simple. Es solo una cuestión de práctica.
IllegalArgumentException
(junto con algunos otros, por ejemplo, NullPointerException
) son ejemplos de una RuntimeException
. Este tipo de excepción no es lo que se conoce como una excepción comprobada . Java requiere que los métodos declaren qué excepciones marcadas arrojaron y que si un método llamado arroja una excepción marcada, el método de llamada debería declarar que arroja la excepción por sí mismo o capturarla y manejarla.
Como tal, mi recomendación concreta sería no, no lo declare. Ciertamente, sin embargo, no querrás atraparlo. En la mayoría de los casos, tampoco desea tirarlo a menos que sea un comportamiento inesperado . 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 el uso de aserciones.
RuntimeException
s como IllegalArgumentException
se utilizan para indicar errores de programación . El programa en sí raramente debería ser capaz de manejarlo. Alguien tiene que arreglar manualmente el código.
Potencial RuntimeException
s debe documentarse de alguna manera en el contrato de funciones (es decir, javadoc), ya sea con los @throws
explícitos o al describir las entradas. Si no tiene un JavaDoc para la función, puede agregar la cláusula throws solo para documentar las posibles dificultades de usar la función, pero en general se desaconseja agregar cláusulas throws para excepciones de tiempo de ejecución.
Si dar una longitud incorrecta no es realmente un error de programación, pero es una situación de excepción, crearía una nueva excepción comprobada (como BadLengthError). Si no es una situación excepcional, no use excepciones para el control de flujo.