IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Avis sur les exception


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Points : 112
    Points
    112
    Par défaut Avis sur les exception
    Bonjour,

    je voudrais avoir un avis d'une personne qui connait bien le language java.

    Je voudrais savoir s'il est mauvais d'utiliser toujours throws Excpetion au lieu de try ... catch.

    Si on utilise try... catch je pense qu'il n'y a pas besoin de throws Exception. Dans le catch la plupart du temps je fais e.printStackTrace ou e.getMessage avec System.out.println

    Merci pour vos réponses

  2. #2
    Membre habitué Avatar de bygui
    Homme Profil pro
    PLM/ALM
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : PLM/ALM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 185
    Points
    185
    Par défaut
    bonjour,
    throws exception ne fais fais que renvoyer l'erreur plus haut dans l'application. elle ne dispense pas d'utiliser le groupe try catch.
    Son utilisation permet d'augmenter la lisibilité de ton code, pour ne pas gérer des erreurs a tout les niveaux.
    L'interception d'une exception peut te permettre aussi de lancer un nouveau traitement. printStackTrace ne sert que pour le debuguage lors de la conception (voir pendant l'utilisation).
    Laisser un message après le Bug!

  3. #3
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Comme le dit bygui, printStackTrace n'est pas la seule chose à faire quand on catch une exception, en règle général il y a un traitement particulier à faire. (remontée d'une erreur à l'utilisateur via une popup, arrêt de l'application, tentative de connexion à un serveur, ...) C'est pour cela qu'il est important de gérer l'exception au bon niveau, ce que permet de faire throw.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    ajountons que, mettre sur une méthode "throws Exception" est très mauvais, car là tu déclare indistinctement tout le panel d'exception existant, l'appelant n'a aucun idée de l'exception réelle que tes méthodes seraient sceptible de renvoyer. Quand tu décide de faire remonter des exception (ce qui est courant et normal), il faut mettre des directive throws qui visent explicitement ces types d'exception, pas des types parent trop généraux. Exemple, un méthode tu utilise pour gerer un fichier serait suceptible d'avoir des erreurs d'IO (mauvais fichier, mauvaios format, etc) ou des erreurs d'état (exemple théorique, on a pas encore défini sur quel fichier travailler ni sur quel format travaille). Ta méthode déclarerais alors "throws IOException, IllegalStateException".

    Ne jamais oublier, dans la javadoc, de mentionner pour chaque exception dans quel cas elle peut etre levée

  5. #5
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Perso, quand j'ai plus de 5 exceptions throwsées, je mets throws Exception, point barre. Cela n'empêche nullement un appelant de catcher une exception en particulier.

    Je considère en effet que, à partir d'un certains nombre d'exceptions, la méthode peut avoir un comportement si varié qu'il vaut mieux assumer cette variabilité. Cela veut dire : Débrouillez-vous, je peux faire n'importe quoi. Par exemple, un test junit fait souvent ainsi (chez moi, tout le temps), et cela me parait bien justifié.

    Après, évidemment, si ce procédé est génant, alors je crée une exception métier, comme on dit.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    J'ai travaillé avec des api qui lancaient parfois 10 exceptions sur la même méthode.... Franchement c'est du n'importe quoi Mais si j'avais vu à la place un 'throws Exception' là j'aurais fait un jaunisse ...... Tu sais pas ce que çà lance, et si tu fait un 'catch (Exception e) tu te chope aussi toutes les runtimeException que t'as peut etre pas envie de catcher....

    LE cas de junit est particulier car, là, la règle est inversée, c'est l'appelant qui, sans connaitre au départ la méthode, l'autorise à renvoyer tout est n'importe quoi (en gros tout ce qui est pas exception junit est traité comme un failure). Et, effectivement, dans ce cas, les méthodes test peuvent renvoyer ce qu'elles veulent.

    Comme toujours, peser le pour est le contre. Je suis personellement contre le throws Exception pour les méthodes d'api publique (utilisable par d'autres développeurs ou sois meme)

  7. #7
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Et aussi que penses-tu du Callable.call() throws Exception ?

    Enfin bon... je voulais juste signaler que la règle Pas de "throws Exception" avait ses... exceptions.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Comme je disais, c'est l'appelant dans ce cas qui a décidé qu'on pouvait lancer tout et n'importe quoi

  9. #9
    Membre averti
    Profil pro
    Développeur Java
    Inscrit en
    Novembre 2007
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2007
    Messages : 301
    Points : 368
    Points
    368
    Par défaut
    Je suis d'accord sur le fait que le throws Exception est immonde. C'est complètement ingérable pour celui qui utilise l'API.

    Par contre, il a effectivement des cas où l'on est obligé de s'en servir comme par exemple avec les interfaces (comme la montré gifffftane). Parfois, on ne veut pas limiter l'implémentation à un seul type d'exception donc on laisse le choix. Ça n'empêche pas que les classes qui vont implémenter cette méthode de ne lançer que les exceptions nécessaires.

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  2. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  3. Vos avis sur les Blog's SVP
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 9
    Dernier message: 16/02/2005, 15h21
  4. Votre avis sur les Logos Nouveau / MAJ, Actualisé, etc...
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 32
    Dernier message: 11/09/2004, 01h17
  5. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo