Comment obliger le catch d'une exception?

Signaler
Messages postés
93
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
30 janvier 2009
-
Messages postés
93
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
30 janvier 2009
-
Salut,



Je cherche à savoir comment on indique à une méthode qu'elle est suscpetible de jetter une exception et que l'objet qui l'appelle soit obligé de la catcher.

En fait, je cherche l'equivalent Java de :

public void fonction1() throws MonException {

...

}

qui provoque une erreur de compilation si l'objet qui appelle fonction1() ne fait pas un try ... catch dessus.



Merci!


tom

8 réponses

Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
5
De plus fonctionnelement il n'y a aucune raison qu'un language te force à catcher telle ou telle type d'exception. Et meme si tu forces les utilisateur a catcher une exception metier, je suis certain que quelque part une exception de plus bas niveau peut remonter de ton code jusqu'a l'UI, alors dans cette hypothese vaut il mieux que l'utilisateur catch 3 exceptions metier et par lassitude ne pas mettre de catch général ou vaut-il mieux qu'il mette seulement un catch général qui lui permettra d'avertir l'utilisateur dans tous les cas ?

P.S. : Oui je suis sur de moi, sinon je mets un conditionnel dans ma reponse ou je reponds pas.

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
5
Désolé pas d'equivalent en .NET de ceci :(

A++

Crazyht
MVP Visual C#.NET

[Admin Codes-Sources]
[Membre Developer-Association]
Messages postés
93
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
30 janvier 2009

T'es sûr de toi?



Je développe des classes de base utilisées par l'équipe "interface
graphique" mais je dois protéger les méthodes que je créer!!! Ils
DOIVENT vérifier si la méthode s'est correctement exécutée!

Je ne peux donc pas coder ça proprement???



J'étais déjà pas fan de .NET et je suis pas prêt de le devenir...


tom
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

Salut,

Tu ne peux faire ça dans aucun langage connu. Même dans le java tu ne peux pas forcer ça.
Je peux parfaitement faire un Throws Exception dans la fonction appelante et elle ne traitera pas l'exception.

Une exception est une information qui te permet de traiter une erreur dans ta pile d'appel. Rien ne peut te forcer à traiter l'erreur sinon l'utilisateur final qui en aura marre que son appli plante. Si tu utilises les exception pour une autre utilisation, il faut complètement revoir ta façon de programmer.

Console.Out.WriteLine("Warny")

Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres
Messages postés
1182
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
6 septembre 2011
12
tu peux utiliser les throw exception effectivement dans ton programme...
mais il faudra que les gens utilisant ta dll face des try pour catcher tes throws...


Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
Messages postés
93
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
30 janvier 2009

Pour répondre à Warny, si tu crée une méthode en java

public void fonction1() throws MonException {

// code


throw new MonException();

}

et que l'oblet client qui appelle fonction1 ne l'encadre pas d'un try
... catch MonException, y'a une erreur de compilation donc le client
est obligé de catcher l'exception.

si je crée

public void fonction1() {

// code

throw new MonException();

}

Alors j'ai une méthode qui peut jeter l'exception MonException mais le client n'est pas obliger de la catcher.



Pour répondre à Crazyht, il est vrai que fonctionnellement il n'y a pas
de raison qu'un langage te force à catcher des exceptions. Mais ce type
de codage force les clients à gérer les erreurs qui peuvent être jetées
par les méthodes. Il suffit qu'un client oublie de catcher l'exception
pour que tu te retrouve avec un bug qui arrive de temps en temps dans
ton programme (et c'est les plus durs à trouver surtout si tu as un
grand nombre de classes). Donc tu limites les bugs, tu gagnes en
stabilité pour ton programme et tu gagne du temps de débugage.

Java te laisse donc la possibilité de forcer l'objet client à catcher
l'erreur ou non en fonction des besoins et du type de méthode que tu
souhaite créer, .NET ne te permet donc pas d'imposer ce type de
restriction aux développeurs qui utilise tes classes.


Vous pouvez dire ce que vous voulez, moi je trouve ça dommage...


tom
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

Salut je suis aussi programmeur java.

Si tu fais

void func1() throws MyException {
thow new MyException();
}

void func2() throws MyException {
func1();
}

Ca passe, et tu n'a pas traité l'exception. Tu peux même faire un Throws Exception.
Perso, compte tenu des capacités du dotnet en face de Java, du portage indépendant qui en est fait en opensource (mono), de la capacité à utiliser plusieurs langages différents, et surtout de l'orientation métier qui lui a été donné dès sa conception, je n'ai aucun mal à faire mon choix : dotnet.

Console.Out.WriteLine("Warny")

Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres
Messages postés
93
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
30 janvier 2009

Tu es quand même obliger de catcher l'exception quand tu appelle func1 ou func2!!



Sinon à la compil :



Main.java:34: unreported exception java.lang.Exception; must be caught or declared to be thrown


tom