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 NumberFormatException
es 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
NumberFormatException
como parte de la firma del método. - Debo definir mi propia excepción marcada (
BadDataException
), manejarNumberFormatException
dentro 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 miBadDataException
si 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 String
s. 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 String
s, los convierte en int
sy 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
String
aint
- Un lugar donde agregas 2
int
s
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 ?