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

Java Discussion :

Checkstyle catch Throwable prohibited


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 210
    Par défaut Checkstyle catch Throwable prohibited
    Voila tout est dans titre ?

    J'ai une regle checkstyle m'interdisant de catcher une Exception de type
    Throwable...

    Je le soucis c'est que je ne comprends pas pourquoi cela n'est pas judicieux ?

    merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    parce que tu va catcher absolument tout. Non seulement les Exception auxquelles tu ne t'attends pas nécessairement et qui sont du à des erreurs de design (exemple des NullPointerException), ce qui pourrait encore être judicieux pour faire retomber ton code sur ses pattes +- dans tous les cas; mais tu va aussi catcher tous les Error (OutOfMemoryError, NoClassDefFoundError, ....) qui traduisent parfois des problèmes chroniques dans l'application, une situation catastrophique et un programme dans un état totalement instables. Ce checkstyle est là pour te dire "attention mon petit, si tu veux vraiment arrêter aussi les truc dangereux comme le OutOfMemoryError, montre moi vraiment que c'est ce que tu veux".

    Mettre un catch(Throwable) ou un catch(Exception) juste pour 'pas se casser le cul', c'est souvent du mauvais design, car t'y va à la grosse louche et, comme pour la pêche au filet, t'as ton poisson mais tu ramasse aussi tous les dauphins et les méduses dont t'as pas besoin

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par allstar Voir le message
    J'ai une regle checkstyle m'interdisant de catcher une Exception de type
    Throwable...
    Par règle "checkstyle" tu veux dire une convention de codage interne à ton équipe ? Je ne connais pas ce mot...


    Catcher un Throwable n'est pas très judicieux dans le sens où ça catche tout et n'importe quoi, sans que tu puisses savoir ce qui s'est passé exactement...

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
      throw new MyException();
    }
    catch (Throwable e) {
      System.out.println("Erreur ! une exception MyException est survenue.");
    }
    Tu peux penser, au vu du code, que dans tous les cas tu catcheras une MyException.
    Mais si jamais une erreur que tu n'as pas prévue dans ton code intervenait (supposons qu'au lieu du throw bête et méchant de cet exemple il y ait un appel à une fonction plus complexe susceptible de lever une MyException, et que lors de l'exécution de cette fonction une RuntimeException soit levée) alors tu vas catcher cette exception et croire qu'il s'agit d'un cas d'erreur donné, alors que ce n'est pas le cas...

    Il vaut donc mieux, pour être sûr de ce que l'on catche, être le plus précis possible dans la clause catch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
      throw new MyException();
    }
    catch (MyException e) {
      System.out.println("Erreur ! une exception MyException est survenue.");
    }
    Ainsi une erreur non prévue ne sera pas "cachée" par un catch trop global.

    Par contre, un catch sur Throwable ne sera sans doute pas gênant si ensuite on relance l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try {
      throw new MyException();
    }
    catch (Throwable e) {
      System.out.println("Erreur ! une exception est survenue.");
      throw e;
    }

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Par règle "checkstyle" tu veux dire une convention de codage interne à ton équipe ? Je ne connais pas ce mot...
    Checkstyle est le nom d'un outil permettant de vérifier si un code se conforme à un certain nombre de normes de codage Java.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Astartee Voir le message
    Par contre, un catch sur Throwable ne sera sans doute pas gênant si ensuite on relance l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    catch (Throwable e) {
      System.out.println("Erreur ! une exception est survenue.");
      throw e;
    }
    Si, au contraire, ce sera très génant, car ta méthode aura alors comme signature "throws Throwable" et l'appelant sera obligé de catcher les Throwable

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 210
    Par défaut
    Oui bien sur il s'agit d'une convention de codage qu'on a dans le checkstyle.xml.

    En tout cas c'es super clair

    merci

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par Deadpool Voir le message
    Checkstyle est le nom d'un outil permettant de vérifier si un code se conforme à un certain nombre de normes de codage Java.
    OK, merci.

    Citation Envoyé par tchize_ Voir le message
    Si, au contraire, ce sera très génant, car ta méthode aura alors comme signature "throws Throwable" et l'appelant sera obligé de catcher les Throwable
    En effet
    J'avais dit "sans doute" parce que là comme ça dans ma tête je ne voyais pas de problème, mais c'est sûr que si on s'amusait à coder ça on s'en rendrait tout de suite compte, un "throws Throwable" je ne laisse pas passer ça !
    [HS] et c'est pas juste pour parler, en ce moment je suis en pleine refonte d'un code produit en Inde où j'ai trouvé, entre autres bêtises, un beau throws Throwable et tout plein de catch (Exception e)...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Avoid Catching Throwable
    Par tentos dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2010, 09h25
  2. [Exception] récupération de la stack trace d'une Throwable
    Par totof2308 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 14/05/2004, 14h49
  3. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 11h23
  4. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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