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

Affichage des résultats du sondage: Êtes-vous pour ou contre cette proposition ?

Votants
227. Vous ne pouvez pas participer à ce sondage.
  • Pour

    53 23,35%
  • Contre

    174 76,65%
Langage Java Discussion :

JDK 7: Proposition 8 : rethrow exceptions [Débat]


Sujet :

Langage Java

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 259
    Points : 607
    Points
    607
    Par défaut
    Et que se passe t'il si j'ai ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public void toto() throws IOException
    {
     try
    {
    something();
    }
    catch(Throwable e)
    {
     // e est une IOException, ca va marcher
     throw e;
    }
     
     try
    {
    somethingelse();
    }
    catch(Throwable e)
    {
     // e est pas une IOException
     throw e;
    }
    }
    Que se passe t'il si n'est pas une IOException ? Le throw n'set pas fait et la méthode continue comme si rien était arrivé ? Il y a une RuntimeException ?

  2. #22
    Membre averti

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Points : 371
    Points
    371
    Par défaut
    Je ne suis ni convaincu, ni pour.

  3. #23
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Je suis pour. Mais c'est vrai que la syntaxe proposée par adiGuba est préférable.

  4. #24
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Je vote pour, mais avec la syntaxe d'adiGuba !
    Netbeans account : nico@share.java.net
    Merci de ne pas poser de questions techniques par MP

  5. #25
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 46
    Points : 86
    Points
    86
    Par défaut
    super pour la proposition 7 ou d'adiguba.

    Autant c'est bien beau d'avoir un langage qui évite les confusions, autant un peu de pragmatisme fait toute la différence dans le succès d'un langage. Voila pourquoi Ruby est maintenant dans le vent.

    je suis désolé de contredire ceux qui dénonce un laxisme mais pondre inutilement 10 lignes pour logger une methode, autant dire que je me contente habituellement de catcher Exception et de perdre le type. c'est moins correct mais c'est plus facile a lire, et tous mes collègues approuvent. Pour tous mes projets, je n'ai pas besoin que mon code soit une œuvre d'art de génie logiciel si ca me fait perdre du temps.

    du pragmatisme, que diable! nous ne sommes pas des machines.

  6. #26
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 23
    Points : 28
    Points
    28
    Par défaut
    Contre, le code deviendra incomprehensible

  7. #27
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 46
    Points : 86
    Points
    86
    Par défaut
    Citation Envoyé par imad.elghazoini Voir le message
    Contre, le code deviendra incomprehensible
    en quoi serait-il incomprehensible? au contraire, il y aura moins de fatras.

  8. #28
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par bobuse Voir le message
    Encore une fois, le problème ne se poserait pas avec la proposition 7, et ce serait beaucoup moins ambigü !!
    Contre cette proposition. La proposition 7 adresse completement ce probleme, et est a mon sens beaucoup plus lisible et compréhensible.

  9. #29
    Membre chevronné
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Points : 1 787
    Points
    1 787
    Par défaut
    Totalement contre également et totalement pour une solution style proposition 7, qui ne fait ni perdre en lisibilité ni en rigueur.

  10. #30
    Membre à l'essai
    Profil pro
    Architecte de système d’information
    Inscrit en
    Février 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Février 2008
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Contre.

    J'ai bien lu tout ce post et ca ne me convint pas.
    Ce final là est incompréhensible et je ne doute pas qu'un developpeur débutant se demandera pour quelle raison on ne peut pas "surcharger" ce catch là.

    En outre, le besoin me parait $être de simple confort et pas si fondé que cela. Puisqu'en balance, on perd en lisibilité du code, je n'hésite pas. Contre

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    J'ai eu pas mal de difficulté a comprendre le but de cette modif.
    Je pense finalement avoir compris,aujourd'hui une Throwable une fois catcher ne peut etre throw sans etre dans la clause throws de la methode cette proposition le permettrait. On pourrait ainsi catcher ces throwable pour pouvoir faire un traitement et les "throwser" (dsl ) sans avoir a polluer la signature de la methode par throws Throwable qui n'a pas de signification precise.

    mais imaginons ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public maMethode(){
        try{
              ....
        }catch(final UneExceptionMetierException e){
            log("...");
            throw e;
        }
    }
    C'est possible ca ? si oui c'est pas terrible non ?
    UML avec VIOLET

  12. #32
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FreshVic Voir le message
    C'est possible ca ? si oui c'est pas terrible non ?

    En fait il faut voir ce catch comme si on ne traitait pas l'exception :
    1. On l'attrape.
    2. On l'utilise comme on veut (log, ...).
    3. Mais on la laisse remonter (comme si on ne l'avait pas catché).


    Donc dans ton cas ce serait exactement comme si tu ne traitais pas l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void maMethode(){
              ....
    }
    Donc :
    • Soit c'est une unchecked exception et cela fonctionnera (il n'y a pas besoin de la déclarer).
    • Soit c'est une checked exception et cela provoquera une erreur du compilateur (car l'exception n'est ni réellement catché ni déclarée dans la cause throws).



    a++

  13. #33
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    En fait il faut voir ce catch comme si on ne traitait pas l'exception :
    1. On l'attrape.
    2. On l'utilise comme on veut (log, ...).
    3. Mais on la laisse remonter (comme si on ne l'avait pas catché).


    Donc dans ton cas ce serait exactement comme si tu ne traitais pas l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void maMethode(){
              ....
    }
    Donc :
    • Soit c'est une unchecked exception et cela fonctionnera (il n'y a pas besoin de la déclarer).
    • Soit c'est une checked exception et cela provoquera une erreur du compilateur (car l'exception n'est ni réellement catché ni déclarée dans la cause throws).



    a++
    Oui je voulais parler d'une checked exception, ca me rassure.
    Merci pour tes lumiere je comprend mieux.
    UML avec VIOLET

  14. #34
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Points : 144
    Points
    144
    Par défaut
    Pas convaincu de l'utilité de ça. Les mauvais point non plus j'en vois, remarque.
    a pas voté

  15. #35
    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
    Moi je vosi l'utilité, dans certains cas, il est nécessaire de "faire le ménage" quand tout ne s'est pas passé comme prévu. Ce ménage, habituellement, je le fait comme çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try{
       un();
       deux();
       toutOk = true;
    } finally {
      if (!toutOk)
        ménage();
    }
    C'est lisible en soit, mais çà manque par fois, pour les besoins de logging, de la cause de l'échec (sans pour autant avoir envie d'empecher l'échec de remonter, après tout , çà peut être une runtimeException assez critique.

    Il a été mentionné les "listener" sur les Exception. Pour avoir activé çà dans mon debugger (pause sur les NoClassDefFoundError pour en trouver l'origine), je vous prie de me croire que l'exécution "normale" de certaines parties de code de la jvm, sont vachement gourmand en exception, tu remplirais ton fichier de logs en une demi-heure , donc pas une bonne idée.

    Enfin, ce code ne couvre pas exactement la même chose que la proposition 7, en effet si tu ne prend que la 7, tu va devoir à chaque fois te coltinner les Error et les RuntimeExceptions dans ta déclaration ....

    Finallement, ce susucre, ne serait que comme un code 'finally' qui n'est exécuté qu'en cas d'exception.

    Au fait pourquoi pas cette notation?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
      //....
    } catch (ExceptionA a){
      //....
    } finally (Throwable t){
      // code en cas d'exception non traitée
    } finally {
      // code toujours exécuté
    }

  16. #36
    Membre averti
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Points : 444
    Points
    444
    Par défaut
    Bonjour,
    J'ai voté contre, car cela va apporter plus de confusion qu'autre chose, enfin il me semble. Il a fallu que je la lise plusieurs fois avant de comprendre quelque chose, alors ça ne me parait pas simple à utiliser. De plus même si le multiple catch peut paraitre lourd, cela permet de bien voir les exceptions déclenchées potentielles. Sinon on est obligés d'ajouter du commentaire pour le spécifier, est-ce vraiment plus lisible ?

    Par contre j'aime bien l'idée :
    Citation Envoyé par tchize_ Voir le message
    Au fait pourquoi pas cette notation?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
      //....
    } catch (ExceptionA a){
      //....
    } finally (Throwable t){
      // code en cas d'exception non traitée
    } finally {
      // code toujours exécuté
    }
    Mais bon, a moins que je me trompe, mais elle existe dejà sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
      //....
    } catch (ExceptionA a){
      //....
    } catch(Throwable t){
      // code en cas d'exception non traitée
    } finally {
      // code toujours exécuté
    }

    JHelp
    Pour avoir une réponse efficace :
    1) Soyez précis dans vos questions
    2) Choisssez bien votre forum
    3) Consultez la FAQ et la doc avant

  17. #37
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Comme indiqué dans le premier message, le problème avec le catch(Throwable) c'est que tu ne peux pas faire remonter l'exception, sauf en déclarant throws Throwable dans ta méthode...


    a++

  18. #38
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Je vote pour à 100%, j'ai plein de cas ou je DOIS propager l'exception (pour qu'un rollback de la transaction soit fait par exemple), mais ou je veux pouvoir la logguer avant.

    Après si la syntaxe perturbe on peut imaginer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    try{
     
     
    }
    catch(final Exception e){
       log(e);
       rethrow(e);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    try{
     
     
    }
    finally(final Exception e){
       log(e);
    }
    Le deuxième cas risque d'etre compliqué si log(e) balance une exception c'est pas très claire laquelle sera propagée, mais si de toute évidence il faut que ce soit la dernière.

  19. #39
    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
    Citation Envoyé par pala00 Voir le message
    Le deuxième cas risque d'etre compliqué si log(e) balance une exception c'est pas très claire laquelle sera propagée, mais si de toute évidence il faut que ce soit la dernière.
    En fait, ce serai exactement la même règle qu'en cas de levage d'un exception au sein d'un finally standard (comme existant actuellement). L'exception déjà levée disparait au profit de la dernière en date.

  20. #40
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 58
    Points : 92
    Points
    92
    Par défaut
    Contre, la proposition 7 est suffisante.
    L'idée de départ n'est pas inintéressante mais, le réultat est trop ambiguë.

Discussions similaires

  1. Réponses: 165
    Dernier message: 03/09/2009, 15h35
  2. Réponses: 78
    Dernier message: 27/08/2009, 19h29
  3. Réponses: 170
    Dernier message: 19/08/2009, 16h13
  4. JDK 7: Proposition 3 : Comparer les énumérations
    Par vbrabant dans le forum Langage
    Réponses: 52
    Dernier message: 19/10/2008, 12h36
  5. Réponses: 27
    Dernier message: 19/10/2008, 11h51

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