Tout à fait une question stupide. Étant donné le code:
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;
}
Pourriez-vous dire si c'est bon Java ou pas? Ce que je suis en train de parler, NumberFormatException
est un décoché exception. Vous n'avez pas à spécifier en tant que partie de l' sum()
signature. De plus, comme je le comprends, l'idée de décoché exceptions est juste pour signaler que la mise en œuvre du programme est incorrect, et même plus, la capture décoché des exceptions est une mauvaise idée, puisque c'est comme la fixation du mauvais programme au moment de l'exécution.
Quelqu'un voudrait-il préciser si:
- Je dois préciser
NumberFormatException
comme une partie de la signature de la méthode. - Je dois définir mon propre vérifié exception (
BadDataException
), la poignéeNumberFormatException
à l'intérieur de la méthode et de re-jeter aussiBadDataException
. - Je dois définir mon propre vérifié exception (
BadDataException
), de valider les deux chaînes d'une certaine façon comme des expressions régulières et de jeter monBadDataException
si elle ne correspond pas. - Votre idée?
Mise à jour:
Imaginez, ce n'est pas une structure open-source, que vous devez utiliser pour une raison quelconque. Vous regardez la signature de la méthode et de penser - "OK, il ne jette". Puis, un jour, vous avez eu une exception. Est-il normal?
Mise à jour 2:
Il y a quelques commentaires disant que mon sum(String, String)
est une mauvaise conception. Je n'ai absolument d'accord, mais pour ceux qui croient que le problème serait tout simplement de ne jamais apparaître si nous avons eu un bon design, voici une question supplémentaire:
La définition du problème, qui est comme ceci: vous avez une source de données où les nombres sont stockés en tant que String
s. Cette source peut être un fichier XML, web page, la fenêtre du bureau avec 2 zones d'édition, que ce soit.
Votre objectif est de mettre en œuvre la logique qui prend ces 2 String
s, les convertit en int
s et affiche la boîte de message disant "la somme est de xxx".
Peu importe ce que l'approche que vous utilisez pour concevoir et mettre en œuvre ce, vous serez d' avoir ces 2 points de l'intérieur de la fonctionnalité:
- Un endroit où vous convertir
String
deint
- Un endroit où vous ajoutez 2
int
s
La question principale de mon post original est:
Integer.parseInt()
s'attend à corriger une chaîne à transmettre. Chaque fois que vous passez une mauvaise chaîne, cela signifie que votre programme est incorrect (et non pas "votre utilisateur est un idiot"). Vous avez besoin de mettre en œuvre le morceau de code où d'une part Entier.parseInt() DOIT sémantique et d'autre part, vous devez être OK avec le cas lorsque l'entrée est incorrecte DOIT sémantique.
Donc, en bref: comment puis-je mettre en œuvre DOIT sémantique si je n'ai que DOIT bibliothèques.