Una pregunta bastante estúpida. Dado el código:
public static int sum(String a, String b) /* throws? WHAT? */ {
int x = Integer.parseInt(a); // throws NumberFormatException
int y = Integer.parseInt(b); // throws NumberFormatException
return x + y;
}
¿Podrías decir si es bueno Java o no? De lo que estoy hablando NumberFormatExceptiones de una excepción sin marcar. No tiene que especificarlo como parte de la sum()firma. Además, según tengo entendido, la idea de las excepciones no verificadas es solo para indicar que la implementación del programa es incorrecta, y aún más, detectar excepciones no verificadas es una mala idea, ya que es como arreglar un programa defectuoso en tiempo de ejecución .
¿Alguien podría aclarar si:
- Debo especificar
NumberFormatExceptioncomo parte de la firma del método. - Debo definir mi propia excepción marcada (
BadDataException), manejarNumberFormatExceptiondentro del método y volver a lanzarlo comoBadDataException. - Debo definir mi propia excepción marcada (
BadDataException), validar ambas cadenas de alguna manera como expresiones regulares y lanzar miBadDataExceptionsi no coincide. - ¿Tu idea?
Actualización :
Imagínese, no es un marco de código abierto, que debería usar por alguna razón. Miras la firma del método y piensas: "Está bien, nunca arroja". Entonces, algún día, tienes una excepción. ¿Es normal?
Actualización 2 :
Hay algunos comentarios que dicen que mi sum(String, String)es un mal diseño. Estoy absolutamente de acuerdo, pero para aquellos que creen que el problema original nunca aparecería si tuviéramos un buen diseño, aquí hay una pregunta adicional:
La definición del problema es la siguiente: tiene una fuente de datos donde los números se almacenan como Strings. Esta fuente puede ser un archivo XML, una página web, una ventana de escritorio con 2 cuadros de edición, lo que sea.
Su objetivo es implementar la lógica que toma estos 2 Strings, los convierte en intsy muestra un cuadro de mensaje que dice "la suma es xxx".
No importa cuál sea el enfoque que utilice para diseñar / implementar esto, tendrá estos 2 puntos de funcionalidad interna :
- Un lugar donde se convierte
Stringaint - Un lugar donde agregas 2
ints
La pregunta principal de mi publicación original es:
Integer.parseInt()espera que se pase la cadena correcta . Siempre que pase una cadena incorrecta , significa que su programa es incorrecto (no " su usuario es un idiota"). Debe implementar el fragmento de código donde, por un lado, tiene Integer.parseInt () con semántica MUST y, por otro lado, debe estar de acuerdo con los casos en los que la entrada es incorrecta: DEBERÍA semántica .
Entonces, brevemente: ¿cómo implemento la semántica DEBERÍA si solo tengo bibliotecas MUST ?