Une question assez stupide. Compte tenu du 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 du bon Java ou pas? Ce dont je parle, NumberFormatException
c'est une exception non contrôlée. Vous n'avez pas à le spécifier dans le cadre de la sum()
signature. De plus, pour autant que je sache, l'idée d'exceptions non contrôlées est juste de signaler que l'implémentation du programme est incorrecte, et plus encore, attraper des exceptions non contrôlées est une mauvaise idée, car c'est comme réparer un mauvais programme à l'exécution .
Quelqu'un pourrait-il préciser si:
- Je devrais spécifier
NumberFormatException
dans le cadre de la signature de la méthode. - Je devrais définir ma propre exception vérifiée (
BadDataException
), gérer l'NumberFormatException
intérieur de la méthode et la relancer commeBadDataException
. - Je devrais définir ma propre exception vérifiée (
BadDataException
), valider les deux chaînes comme des expressions régulières et lancer myBadDataException
si elle ne correspond pas. - Ton idée?
Mettre à jour :
Imaginez, ce n'est pas un framework open-source, que vous devriez utiliser pour une raison quelconque. Vous regardez la signature de la méthode et pensez - "OK, ça ne jette jamais". Puis, un jour, vous avez une exception. Est-ce normal?
Mise à jour 2 :
Il y a des commentaires disant que ma sum(String, String)
conception est mauvaise. Je suis tout à fait d'accord, mais pour ceux qui pensent que le problème d'origine n'apparaîtrait jamais si nous avions un bon design, voici une question supplémentaire:
La définition du problème est la suivante: 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, une page Web, une fenêtre de bureau avec 2 zones d'édition, peu importe.
Votre objectif est d'implémenter la logique qui prend ces 2 String
s, les convertit en int
s et affiche une boîte de message disant "la somme est xxx".
Quelle que soit l'approche que vous utilisez pour concevoir / implémenter cela, vous aurez ces 2 points de fonctionnalité interne :
- Un lieu où vous convertissez
String
àint
- Un endroit où vous ajoutez 2
int
s
La principale question de mon message d'origine est:
Integer.parseInt()
s'attend à ce que la chaîne correcte soit transmise. Chaque fois que vous passez une mauvaise chaîne , cela signifie que votre programme est incorrect (et non " votre utilisateur est un idiot"). Vous devez implémenter le morceau de code où d'une part vous avez Integer.parseInt () avec la sémantique MUST et d'autre part vous devez être OK avec les cas où l'entrée est incorrecte - DEVRAIT la sémantique .
Donc, brièvement: comment implémenter la sémantique DEVRAIT si je n'ai que des bibliothèques MUST .