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 :

La gestion de plusieurs exceptions


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Octobre 2016
    Messages : 7
    Par défaut La gestion de plusieurs exceptions
    Bonjour,

    J'ai crée deux classes NomVilleException et NombreHabitantExeption pour gérer deux exceptions (si l'utilisateur crée une instance de Ville avec un nom inférieur à 3 lettres/si l'utilisateur crée une instance de Ville avec un nombre d'habitants négatif), lorsque j'instancie un objet Ville avec un nombre d'habitants négatif et un nom inférieur à trois lettres je n'ai qu'une seule exception de capturé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class NombreHabitantExeption extends Exception {
     
    	public NombreHabitantExeption() {
    		System.out.println("Nombre d'habitants négatif !!!");
    	}
     
    	public NombreHabitantExeption(int nbr) {
    		System.out.println("Nombre d'habitants négatif !!!"+nbr);
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class NomVilleException extends Exception {
     
    	public NomVilleException() {
    		System.out.println("le nom de la ville est inférieur à 3 caractères");
    	}
    }

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class Ville {
     
     
    		  private String nomVille;
    		  private String nomPays;
    		  private int nbreHabitants;
    		  private char categorie;
     
    		  public Ville(){
    		    System.out.println("Création d'une ville !");          
    		    nomVille = "Inconnu";
    		    nomPays = "Inconnu";
    		    nbreHabitants = 0;
    		    this.setCategorie();
     
    		  }
     
    		  public Ville(String pNom, int pNbre, String pPays) throws  NombreHabitantExeption, NomVilleException
    		  {  
    		    if(pNbre < 0)
    		      throw new NombreHabitantExeption(pNbre);
     
    		    if(pNom.length() < 3)
    		      throw new NomVilleException();
    		    else
    		    {
     
     
    		      nomVille = pNom;
    		      nomPays = pPays;
    		      nbreHabitants = pNbre;
    		      this.setCategorie();
    		    }          
    		  }
    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
    23
    24
    25
     
     
      public class TestException {
     
    	  public static void main(String[] args) {
     
    		  Ville v = null;
     
    		  try {
    		    v = new Ville("Re", -12000, "France");
    		  }
     
    		  //Gestion de l'exception sur le nombre d'habitants
    		  catch (NombreHabitantExeption e) {}
     
    		  //Gestion de l'exception sur le nom de la ville
    		  catch(NomVilleException e2){}
     
     
     
     
     
    	  }
     
    }
    Résultat retourné : Nombre d'habitants négatif !!!-12000

    Merci de votre aide.

  2. #2
    Membre Expert Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 447
    Par défaut
    C'est normal, une exception casse le flux d'exécution attendu, une fois lancée, tout se qui se trouve après son lancement est donc ignoré jusqu'à ce qu'elle soit attrapée.

    Si tu veux faire plusieurs validations, tu peux créer un objet qui va contenir leur résultats et qui sera rempli au fur et à mesure des tests de validation, une fois la validation terminée, si l'objet conteneur n'est pas vide, tu crées une nouvelle exception contenant cet objet et tu la lances.

    Evidemment toute validation doit se faire AVANT tout traitement par ton objet à valider.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Également une exception peut contenir d'autres exception nommees suppressed, tu peux donc tres bien stocker chacune des deux exceptions dans l'exception finale qui sera levee par la validation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (nombreHabitantExeption != null || nomVilleException != null) {
       ValidationException ex = new ValidationException(); 
       Optional.ofNullable(nombreHabitantExeption)
            .ifPresent(ex::addSuppressed);
       Optional.ofNullable(nomVilleException)
            .ifPresent(ex::addSuppressed);
       throw ex;
    }
     
    [...]
     
    Arrays.stream(ex.getSuppressed())
        .forEach(...);
    Bon appres ca depend de comment tu veux gérer / logger tout cela et avec quel niveau de complexité. Parfois juste un flag boolean nombreHabitantFailed / nomVilleFailed est largement suffisant, d'autre fois tu veux vraiment stocker une exception avec toute la trace qui va avec.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. [Débutant] Gestion de plusieurs exceptions dans une sub
    Par Attila54 dans le forum VB.NET
    Réponses: 14
    Dernier message: 17/08/2013, 19h29
  2. Les Exceptions - Gestion de plusieurs Exceptions
    Par Jonpool dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 09/03/2010, 15h03
  3. Gestion avancée d'exception et compatibilité dotnet
    Par RamDevTeam dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 14/11/2005, 18h12
  4. [Réseau] Gestion de l'exception à la connexion
    Par zegota dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 22/07/2005, 14h15
  5. Réponses: 8
    Dernier message: 06/07/2004, 14h17

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