Je travaille avec une API qui prétend retourner true si elle réussit, et false si elle échoue. Mais, il prétend également jeter des exceptions différentes si elle échoue. Comment peut-il retourner false et lancer une exception?Renvoie une valeur ET génère une exception?
Répondre
Il n'est pas possible de lancer une exception et de renvoyer une valeur à partir d'un seul appel de fonction.
Peut-être qu'il fait quelque chose comme retourner false
s'il y a une erreur, mais en levant une exception si l'entrée n'est pas valide.
modifier: PaulPRO a affiché un (maintenant supprimé) réponse en soulignant qu'il est techniquement possible de faire une exception à être jeté dans un autre thread, en retournant une valeur dans l'actuel. Je pensais que cela valait la peine d'être noté, même si ce n'est pas quelque chose que vous devriez jamais voir.
Vous pouvez lancer une exception a un (dans ce booléen cas) Valeur:
public class ValueException extends Exception {
final boolean value;
public ValueException(boolean value, String message) {
super(message);
this.value = value;
}
public boolean getValue() {
return value;
}
}
Bien qu'il soit possible d'écrire votre code de telle sorte qu'une exception et une valeur peuvent être dérivées d'un appel de fonction (voir les messages ci-dessus), il ne devrait JAMAIS être fait dans le bon codage.
J'aimerais voir un lien vers la documentation sur cette API. Les API doivent accorder la priorité à la clarté. Lancer une exception et retourner une valeur laisse la question de savoir si la valeur renvoyée est sûre à utiliser ou si elle est invalide. Souvenez-vous, les blocs try/catch sont la méthode OTHER de gestion des exceptions. Ils ne transmettent pas l'exception à la méthode appelante, mais la gèrent en interne d'une manière jugée appropriée par le développeur.
Si, à des fins de débogage, vous devez voir la valeur résultante dans le cas d'une exception, l'idée de Bohemian fonctionne bien.
- 1. Visio AddAdvice génère une exception
- 2. Pourquoi .split ("\\") génère une exception?
- 3. L'augmentation de allocationSize génère une exception NonUniqueObject
- 4. pourquoi ce code génère une exception?
- 5. Pourquoi ce code génère une exception?
- 6. La méthode MediaLibrary.SavePicture génère une exception System.UnauthorizedAccessException
- 7. appel d'une méthode qui génère une exception
- 8. WorkflowApplication génère une exception unhandle dans ASP.NET
- 9. L'utilisation de Scanner et de Patterns génère toujours une exception
- 10. WPF - Liaison à un ItemsSource ET SelectedIndex génère une exception?
- 11. Glassfish génère une exception ProcessorTask et se bloque
- 12. Comment générer une exception qui imprime un message et renvoie une valeur?
- 13. Lorsque IQueryable ne renvoie aucun enregistrement ToList() renvoie une exception
- 14. dependsOnMethods qui renvoie une valeur
- 15. L'accès renvoie une valeur différente
- 16. Bower ne génère pas de fichier components.json, renvoie une erreur
- 17. "Obligatoire" DataAnnotation renvoie une exception non affectée
- 18. L'attribut Composant Composant requis génère une exception dans Mojarra 2.0.3
- 19. La requête C# OleDb select génère une exception d'opérateur manquante
- 20. Différence entre renvoie une valeur nulle et une chaîne vide?
- 21. OCMock sur une méthode avec argument et renvoie une valeur
- 22. getApplicationContext() renvoie une exception lorsqu'il est utilisé
- 23. service renvoie une exception de pointeur nul
- 24. HttpContext.Current.Request.Url.Host renvoie une valeur incorrecte
- 25. Backbone.Collection.reset() renvoie une exception dans IE8
- 26. Le client CXF renvoie une exception NullPointerException
- 27. Hash renvoie une valeur négative
- 28. L'enfilage .NET renvoie une valeur?
- 29. getCharacterOffset() renvoie une valeur incorrecte
- 30. fscanf() renvoie une valeur négative
C'est ce que j'ai pensé. Je pensais qu'il pourrait y avoir un truc avec un bloc finalement si. – mark
une fois qu'une exception est levée, votre programme cesse de fonctionner, donc il est impossible de faire les deux. Je me demande si vous avez une déclaration de retour dans votre bloc 'try', le programme passe-t-il toujours le bloc 'final', parce que si vous revenez une valeur dans le bloc try et mettez une exception Throws dans le bloc Final, J'ai fait les deux .. –
@ Karel-Jan Misseghers: non, en Java, votre programme ** N'arrête pas de fonctionner ** une fois qu'une exception est levée. Vous êtes confus quant à la façon dont les exceptions Java fonctionnent et n'ont évidemment pas encore fait de programmation Java multi-thread. Vous pouvez avoir beaucoup de threads continuer à travailler quand une exception non cochée survient dans un autre thread. Il y a beaucoup de cas où le thread mourant est redémarré automagiquement (le plus connu étant EDT de Swing sur certains OS/JVM: si l'EDT meurt, un nouvel EDT est redémarré). – SyntaxT3rr0r