Decir que tengo la siguiente línea en un método:¿Suprimir-atrapar o lanzar excepciones que nunca pueden ocurrir?
String encodedString = URLEncoder.encode(foo, "utf-8");
este método produce una UnsupportedEncodingException
. ¿Qué es mejor:
/** @throws UnsupportedEncodingException umm...never
*/
public void myMethod() throws UnsupportedEncodingException {
...
String encodedString = URLEncoder.encode(foo, "utf-8");
...
}
(obligando a la persona que llama para atrapar a este mismo) O:
public void myMethod() {
try {
...
String encodedString = URLEncoder.encode(foo, "utf-8");
...
catch(UnsupportedEncodingException e) {
Logger.log("cosmic ray detected!");
}
}
O hay una forma más elegante de manejar excepciones que no pueden realmente ha ocurrido?
ambas respuestas son grandes sino que estoy aceptando esto debido a la idea de RuntimeException, que es grande. Tal vez una IllegalStateException tendría sentido aquí ... – Epaga
Otra posibilidad es 'lanzar nuevo AssertionError (" esto no puede suceder ", ex)' –
@StephenC, ¿es esto de alguna manera mejor que Runtime? – Line