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 :

[Syntaxe] Un return dans un try... Comment faire ?


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut [Syntaxe] Un return dans un try... Comment faire ?
    Bonjour.

    Comment faut-il s'y prendre pour utiliser un return dans un Try, par exemple :

    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
    private Color stringToColor(String paramValue)
    	throws NumberFormatException
    	{
    		int red = 0;
    		int green = 0;
    		int blue = 0;
     
    		try
    		{
    			red = (Integer.decode("0x" + paramValue.substring(1,3))).intValue();
    			green = (Integer.decode("0x" + paramValue.substring(3,5))).intValue();
    			blue = (Integer.decode("0x" + paramValue.substring(5,7))).intValue();
    			return new Color(red,green,blue);	
    		}
    		catch (StringIndexOutOfBoundsException e)
    		{
    			System.err.println(e);
    		}
    	}
    Evidement, Eclipse n'est pas d'accord, il me dit que la fonction doit retourner une variable Color. Je suis bien d'accord, mais comment gérer l'exception dans ce cas ?

    Je crois qu'il y a une notion en java que j'ai pas bien compris.


    Un grand merci d'avance pour votre aide.

    Antoine.

  2. #2
    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
    En gros ce que le compilateur n'aime pas c'est que si une StringIndexOutOfBoundException est lancé il ne retourne rien alors que la fonction dois retourné un objet Color !!

    Donc la solution est de (dans ton catch) lancer une Exception ou alors de retourné un objet color qui serais le Color par defaut en cas d'erreur !!

    Si tu lance une exception n'oublie pas de la specifié dans le throws de la methode
    UML avec VIOLET

  3. #3
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Tu as deux solutions:

    Soit tu renvoie une valeur équivalente a une erreur : null par exemple, soit tu retransforme ton exception en une exception propre a ton appliation...

    Une autre solution si tu ne veux pas de ces deux cas: c'est de ne pas catcher l'exception : StringIndexOutOfBoundsException n'est pas à catcher car c'est une RuntimeException !!!

  4. #4
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Dans ton cas :
    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
    private Color stringToColor(String paramValue) 
       throws NumberFormatException 
       { 
          int red = 0; 
          int green = 0; 
          int blue = 0; 
     
          try 
          { 
             red = (Integer.decode("0x" + paramValue.substring(1,3))).intValue(); 
             green = (Integer.decode("0x" + paramValue.substring(3,5))).intValue(); 
             blue = (Integer.decode("0x" + paramValue.substring(5,7))).intValue(); 
          } 
          catch (StringIndexOutOfBoundsException e) 
          { 
             System.err.println(e);
             return new Color(0,0,0);
          } 
    return new Color(red,green,blue);
       }
    ou
    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
    private Color stringToColor(String paramValue) 
       throws NumberFormatException 
       { 
          int red = 0; 
          int green = 0; 
          int blue = 0; 
          Color color=null;
     
          try 
          { 
             red = (Integer.decode("0x" + paramValue.substring(1,3))).intValue(); 
             green = (Integer.decode("0x" + paramValue.substring(3,5))).intValue(); 
             blue = (Integer.decode("0x" + paramValue.substring(5,7))).intValue(); 
          color = new Color(red,green,blue);
    } 
          catch (StringIndexOutOfBoundsException e) 
          { 
             System.err.println(e);
             color = new Color(0,0,0);
          } 
    return color;
       }
    Mais je plussoie pour le fait que StringIndexOutOfBoundsException nbe doit pas être catchée !!
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  5. #5
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 278
    Points
    278
    Par défaut
    une autre solution est de faire remonter l'exception comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private Color stringToColor(String paramValue) 
       throws NumberFormatException, StringIndexOutOfBoundsException
       { 
          int red = 0; 
          int green = 0; 
          int blue = 0; 
     
             red = (Integer.decode("0x" + paramValue.substring(1,3))).intValue(); 
             green = (Integer.decode("0x" + paramValue.substring(3,5))).intValue(); 
             blue = (Integer.decode("0x" + paramValue.substring(5,7))).intValue(); 
             return new Color(red,green,blue);    
       }
    Je trouve ça plus propre, car catcher une exception et ne rien en faire (ou ne pas savoir quoi en faire) : bof ! Autant rebalancer la patate chaude, en espérant qu'au dessus ils sauront quoi en faire

  6. #6
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Ne pa faire de throws NumberFormatException, StringIndexOutOfBoundsException

  7. #7
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    lol, faut qu'on arrête là les mecs, il va nous cogner sinon ...
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  8. #8
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par thibaut
    Ne pa faire de throws NumberFormatException, StringIndexOutOfBoundsException
    Heu où est le problème ?
    Catcher une exception sans rien faire, je vois pas l'intérêt !
    Retourner un objet null n'arrange pas les choses, car ça ne donne pas d'info sur l'origine du dysfonctionnement. A moins que ce soit dans les specs de la fonction, mais faut m'expliquer ...
    En faisant remonter les exceptions, on peut en faire ce qu'on veut !

  9. #9
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Oui tu peux les catcher les RuntimeException mais ça ne sers a rien de faire un throws sur ce type d'exception, car elles sont remontées obligatoirement...

    Danc ce cas remonte une exception personnalisée...

  10. #10
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Est ce que dans ton cas l'origine du dusfonctionnement (comme tu dis) est pertinante...

    A mon avis non, qu'est ce que va vouloir savoir un utilisateur de ton appli ???

    Il va vouloir savoir qu'il y à eu un problème, mais le fond du problème, il s'en tape...

    La solution avec des erreurs techniques est de les logger dans un fichier ou sur la console est de renvoyer doit null, soit de remonter une exception personnalisée... Mais l'utilisateur s'en fout de StringIndexOutOfBounds...

  11. #11
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    C'est aussi qu'un StringIndexOutOfBounds ça doit pouvoir s'éviter en faisant un test avant !
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  12. #12
    Membre actif
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Points : 278
    Points
    278
    Par défaut
    Je rapelle que le code n'est pas de moi

    Est ce que dans ton cas l'origine du dusfonctionnement (comme tu dis) est pertinante...

    A mon avis non, qu'est ce que va vouloir savoir un utilisateur de ton appli ???

    Il va vouloir savoir qu'il y à eu un problème, mais le fond du problème, il s'en tape...
    Bien sûr que ça ne sert à rien de la donner à l'utilisateur l'exception. Mais j'ai supposé que la fonction en question (stringToColor) était appelée par une autre fonction qui a un contexte que je ne connais pas.
    Oui tu peux les catcher les RuntimeException mais ça ne sers a rien de faire un throws sur ce type d'exception, car elles sont remontées obligatoirement...
    Ben c'est mieux que les choses soient claires ! On prend un risque d'avoir une exception sans la catcher, on le sait à cet endroit du code. En amont (à un autre endroit du code), on ne le sait pas forcément. Sauf si la signature de la fonction signale les exceptions qu'elle est succeptible de lancer.

  13. #13
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Quoi qu'il en soit tu as toujours le risque d'avoir des exceptions sans les catcher a savoir pour exemple NullPointerException si paramValue est nulle alors...

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Salut.

    Merci beaucoups pour vos réponses, en fait je ne voyais pas la chose comme ça, j'avais pas bien compris le système d'exception.

    En tout cas, merci de m'avoir répondu aussi vite, je commençais à criser devant mon code

    Je vais utiliser la technique qui conciste à retourner une couleur par defaut, elle me parait pas mal du tout.


    Ciaooo

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

Discussions similaires

  1. Appel Javascript dans css onClick, comment faire?
    Par copin dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 22/07/2008, 16h44
  2. variable dans un libellé, comment faire ?
    Par chapeau_melon dans le forum WinDev
    Réponses: 2
    Dernier message: 01/02/2008, 23h08
  3. Réponses: 5
    Dernier message: 03/09/2007, 20h36
  4. Réponses: 3
    Dernier message: 12/12/2006, 18h58
  5. Très long texte dans Quick Report - Comment faire ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 22h18

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