Por ejemplo, muchos métodos en frameworks / JDK pueden arrojar
java.lang.SecurityException
pero esto no se indica en la firma del método (ya que esa es una práctica normalmente reservada para las excepciones comprobadas). Quiero argumentar que declarar RuntimeExceptions en sigs de métodos tiene muchos beneficios (similar a la verificación de tipos estáticos, por ejemplo). ¿Estoy borracho o no?
java
exception
oop
exception-handling
Jacques René Mesrine
fuente
fuente
Desde el tutorial de Oracle Java :
fuente
Eche un vistazo al javadoc para Collection # add
Hay una gran cantidad de excepciones no comprobadas mencionadas:
Throws: UnsupportedOperationException - add is not supported by this collection. ClassCastException - class of the specified element prevents it from being added to this collection. NullPointerException - if the specified element is null and this collection does not support null elements. IllegalArgumentException - some aspect of this element prevents it from being added to this collection.
Si tiene paciencia, le recomiendo que documente a fondo las posibles excepciones arrojadas por sus métodos de esta manera. En cierto modo, es aún más importante hacer esto para las excepciones no comprobadas, ya que las excepciones comprobadas se autodocumentan (el compilador obliga al código de llamada a reconocerlas).
fuente
throws
en la firma del método. Estos no son la misma cosa. Sí, absolutamente debe documentar todas las excepciones lanzadas por su API, pero la pregunta no es sobre eso.En mi punto de vista, es mejor declarar excepciones en tiempo de ejecución al menos en el javadoc para el método. Declararlo en la firma hace que sea aún más obvio lo que puede suceder cuando algo sale mal. Esta es mi razón principal para sugerir que proporcione esta información.
Para su información: a medida que ha avanzado el tiempo (ahora en 2017), ahora me inclino mucho más a documentarlos solo en javadoc y evitar las excepciones marcadas tanto como sea posible.
fuente
En mi opinión, las excepciones no comprobadas nunca deben declararse en la firma del método, ya que son contrarias a su naturaleza.
Sin embargo, si es probable que un método arroje algunas excepciones no comprobadas, observar las circunstancias probables en @throws en Javadoc puede ser útil para que otros invoquen el método para comprender qué puede salir mal. Sin embargo, esto solo es útil para las excepciones que es probable que las personas que llaman puedan manejar (como una NPE debido a una entrada incorrecta, etc.)
fuente
Si está escribiendo una api para que la utilicen otros, entonces hay una amplia razón para la documentación explícita de su intención en la api y no hay inconveniente en declarar RuntimeExceptions en la firma del método.
fuente
Esto tiene que ver con la discusión sobre las excepciones marcadas . La mayoría estaría de acuerdo en que las excepciones no deben declararse en las firmas de métodos.
También hay una discusión sobre cómo se deben usar las excepciones en tiempo de ejecución. Estoy de acuerdo con un póster en que las excepciones en tiempo de ejecución deben indicar un error de programación o una condición fatal. Entonces no hay mucho mérito declararlos en la firma. Cada método podría potencialmente a través de uno.
fuente