Java exception: throw back ou envoyer par retour (fonction de sortie)?
Ici est l'utilisation: je suis en train d'écrire des classes et des fonctions qui sont conçus pour exécuter une fonction spécifique/tâche (par exemple createBuilding, destroyBuilding etc). La conception que je suis, c'est que la fonction ne pas traiter/gérer toute erreur de scénario. Sa la responsabilité de l'appelant à prendre les mesures appropriées, dans le cas où il y a une erreur/exception. Je peux le faire de deux façons:
public void caller {
try {
A.createBuilding();
catch (Exception e) {
process exception
}
}
Première approche:
public class A {
public String createBuilding throws Exception {
try {
blah blah blah
catch (Exception e) {
throw new Exception(e);
}
}
Deuxième approche:
public class A {
public String createBuilding {
StringBuffer sb = new StringBuffer();
try {
blah blah blah
catch (Exception e) {
sb.add(e.toString());
}
return sb.toString();
}
The user in the second case does the following:
public void caller throws Exception {
String st = A.createBuilding();
if (st.contains("Exception"))
do something;
}
Supposons que la fonction appelée renvoie toujours une chaîne de caractères.
Des commentaires sur l'approche qui est mieux? Tout pièges/questions je suis dominant?
Reconnaissant de toute l'aide!!!
OriginalL'auteur Rahul | 2011-08-26
Vous devez vous connecter pour publier un commentaire.
D'utiliser la première, bien sûr, j'.e à utiliser les Exceptions.
La seconde pauses des années de recherche sur la gestion des erreurs, ne le faites pas.
Raison:
Si vous utilisez des Exceptions, vous serez en mesure de tirer parti de l'ensemble de la gestion des erreurs cadre en java construire autour des exceptions comme le Fil.uncaughtExceptionHandler et de la pile-traces etc. Aussi à l'aide de excpetion est la meilleure façon de la gestion des erreurs et sera recommandé sur le retour des chaînes personnalisées pour identifier les erreurs
OriginalL'auteur Suraj Chandran
Retourne une chaîne supprime les informations (comme la stacktrace.) Si votre méthode ne permet pas de gérer l'exception, il ne devrait pas l'attraper et l'appelant de la poignée:
Exception
, pas pourRuntimeException
. MalheureusementException
est certainement sous-utilisés par trop d'un développeur.la réponse est utilisé comme exemple pour être remplacé par le type d'exception est en fait utilisé. Le fait est que vous ne devriez pas les attraper et de les renvoyer exception, si vous n'avez pas agir sur eux.
C'est exactement le problème que j'ai le visage. Si j'obtiens une exception, la seule façon de l'envoyer à l'appelant est d'attraper l'exception et de le jeter en arrière (nouveau jeter...). Si il y a une longue pile d'appels, chaque appelant a besoin de le faire et c'est une sorte de douloureux. Donc, si j'ai quelque chose comme de l'Appelant A->Appelant B->Appelant le C et le C déclenche une exception d'exécution, quel est le meilleur moyen d'obtenir de l'appelant, l'Une sans que tout le monde la capture et de la re de le jeter???
le meilleur moyen est de laisser l'appelant A attraper l'exception d'exécution et de ne pas les attraper et de les renvoyer. Le fait que vous ne déclarez pas d'exceptions d'exécution comme étant levée à partir de vos méthodes ne signifie pas qu'ils restent à l'intérieur de votre méthode, ils se la pile d'appel jusqu'à ce qu'ils sont surpris. Si vous décidez que votre API devrait lancer son propre type d'exception, vous devez attraper l'exception d'exécution au point le plus bas possible, enveloppez-la dans votre propre type d'exception et de la jeter. Ne pas les attraper et de les renvoyer sur son chemin. N'oubliez pas d'utiliser
finally {}
blocs de code de nettoyage.OriginalL'auteur rsp
Le seul inconvénient dans l'utilisation d'Exceptions, c'est qu'ils sont un tout petit peu plus lent, sinon elles ne fournissent que des avantages (traces de pile, possibilité d'utiliser des gestionnaires spécialisés, facile à utiliser, les états, built-in, etc.). Si l'impact sur les performances est tenue de vous remettre en les utilisant, vous devriez probablement passer à l'ASM ou C, et si vous le faites, n'oubliez pas de ramener à 0 pour la réussite et de rien d'autre pour l'échec, de sorte que vous avez suffisamment de codes pour eux beaucoup d'erreurs possibles 😉
Non, vraiment, aller de l'avant et à l'utilisation des Exceptions, par tous les moyens. Sauf si vous pouvez venir avec une raison beaucoup de gens d'autres peuvent le voir comme valides (afin de ne pas seulement vous-même).
OriginalL'auteur Marius Burz