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 :

Classes anonymes et exceptions


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Par défaut Classes anonymes et exceptions
    Bonjour,

    J'utilise une classe anonyme (pour implémenter l'interface ThreadLocal) et l'une des fonctions définie peut renvoyer une exception.
    Je voudrais pouvoir faire remonter cette exception dans la classe du dessus (MaClasse) d'une manière ou d'un autre mais je ne trouve pas comment faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public MaClasse {
    	private static ThreadLocal<BaseDeDonnees> bd = new ThreadLocal() {
    		@Override
    		protected synchronized Object initialValue() {
    			return new BaseDeDonnees(...); // Lève une Exception
    		}
    	};
     
    	public static BaseDeDonnees getBd() {
    		return bd.get(); // Provoque l'appelle à initialValue()
    	}
    }
    Je n'ai pas le droit de déclarer un "throws Exception" sur la méthode initialValue() car elle est surchargée donc je ne peux pas changer son prototype.

    J'espère que c'est possible. Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Dans ce cas, une idée est d'encapsuler ton exception dans une erreur. Ainsi, tu n'auras plus de problème avec la méthode initialValue.

    Tu pourras ensuite retrouver ton exception d'origine.

    En gros, tu obtiens (code non testé):
    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 MaClasse {
    	private static ThreadLocal<BaseDeDonnees> bd = new ThreadLocal() {
    		@Override
    		protected synchronized Object initialValue() {
                        try{
    			return new BaseDeDonnees(...); // Lève une Exception
                        }
                        catch(Exception e){throw new MyError(e);}
    		}
    	};
     
    	public static BaseDeDonnees getBd() {
                try {
    		return bd.get(); // Provoque l'appelle à initialValue()
                }
                catch(MyError e) {
                  Exception ex =  e.getCause();
                   ...
                }
    	}
    }

  3. #3
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Même si c'est possible, il est "déconseillé" de soulever des erreurs. En effet les erreurs ne sont pas des exceptions et sémantiquement une erreur DOIT arreter le programme. Ce sont des évenements très grave dans la vie d'un programme, aussi il est déconseille de les utiliser pour ce type d'utilisation.
    En revanche il est possible d'utiliser des RuntimeException, qui sont unchecked (c'est-à-dire qu'il n'est pas imposé de les catcher ni de préciser un throws en cas de non traitement de l'exception dans une methode). Le comportement reste le même qu'avec les errors mis à part que c'est plus approprié. On pourra la catcher dans le code appelant pour traiter l'exception.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 54
    Par défaut
    Avec les Error et RuntimeException (je vais garder ça vu que c'est plus approprié), ça marche comme je voudrais, merci !

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

Discussions similaires

  1. Variable d'instance et classe anonyme
    Par zoullou dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 21/05/2006, 12h30
  2. Réponses: 5
    Dernier message: 16/08/2005, 10h30
  3. [EJB Session] class not found exception ?
    Par champion dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 11/02/2005, 23h46
  4. [classe anonyme] implementant une interface
    Par stanilas dans le forum Langage
    Réponses: 4
    Dernier message: 30/11/2004, 00h18
  5. [Vector] classe Vector et exception
    Par Nanoua dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2004, 12h37

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