Non �a ne marche pas :

public void maMethode() throws C {
        try {
                appel d'une methode pouvant lever les exception A,B ou C
        } catch(Exception e) {
                if (e instanceof A || e instanceof B) {
                } else {
                        throw e;
                }
        }
}
est invalide.
e est de type Exception alors que seul C est l'ecption autoris�e

On peut �crire
public void maMethode() throws C {
        try {
                appel d'une methode pouvant lever les exception A,B ou C
        } catch(C c) {
                thorw c;
        } catch(Exception e) {
                if (e instanceof A || e instanceof B) {
                }
        }
}
Mais si ma m�thode appel�e l�ve aussi D, le compilateur ne rale pas.

Pour moi la seule solution est
try {

} catch(A a) {
        ...
} catch(B b) {
        ...
} catch(C c) {
        ...
}

J'aimerai pourvoir �crire
} catch(A a, B b, C c) {
}
Mais je n'ai pas trouv� de solution.

instanceof est vraiment une instruction a utiliser avec parcimonie car elle
masque souvent les erreurs de compilation et on les retrouve � l'execution
ce qui fait perdre enorm�ment de temps.

--------------------------------------------------------------------
Erik Mazoyer, Chef de projet
HyperOffice
6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
T�l. 01 41 96 96 76
Fax 01 41 96 96 77
M�l  [EMAIL PROTECTED] 

-----Message d'origine-----
De: Zeljko VELAJA [mailto:[EMAIL PROTECTED]]
Date: mardi 14 mai 2002 16:06
�: [EMAIL PROTECTED]
Objet: RE: Traitement d'exceptions


Effectivement, mais on peut aussi y rem�dier :

try
{
}

catch(Exception e)
{
    if (e instanceof IOException || e instanceof NullPointerException) ...
    else throw e;
}

Mais bon, c'�tait pour coller pr�cis�ment � la question : je n'ai jamais
fait diff�remment d'Eric, m�me si la syntaxe lourdingue du try-catch en java
(et de bien d'autres langages) m'exasp�re.
La m�thode d'Eric, faisant appel � une m�thode de traitement, me semble
n�anmoins la plus propre, � moi aussi !

-----Message d'origine-----
De : Nicolas Delsaux [mailto:[EMAIL PROTECTED]]
Envoy� : mardi 14 mai 2002 15:06
� : [EMAIL PROTECTED]
Objet : Re: Traitement d'exceptions


Je pr�f�rais quand m�me nettement le code d'Eric : un tout petit peu plus
objet, nettement plus modulaire, il permet (pour l'instant) d'effectuer le
traitement, tout en se gardant facilement ouverte la possibilit� d'en
changer. Par ailleurs, si une troisi�me exception doit �tre renvoy�e � la
m�thode appelante, elle peut l'�tre sans souci, alors que ta m�thode la
caputre �galement.

Nicolas Delsaux

----- Original Message -----
From: Zeljko VELAJA
To: [EMAIL PROTECTED]
Sent: Tuesday, May 14, 2002 11:42 AM
Subject: RE: Traitement d'exceptions


Ce code g�re justement de fa�on DIFFERENTE les deux exceptions. Pour
effectuer un m�me traitement :
a) soit on catche la superclasse commune des deux exceptions : mais ici
c'est pas g�nial car la seule
classe commune est java.lang.Exception, trop g�n�rale.

Ou alors on peut catcher un Exception et tester son type :

try
{
}

catch(Exception e)
{
    if (e instanceof IOException || e instanceof NullPointerException) ...
}



 -----Message d'origine-----
De : Eric MOREL [mailto:[EMAIL PROTECTED]]
Envoy� : mardi 14 mai 2002 11:21
� : [EMAIL PROTECTED]
Objet : Re: Traitement d'exceptions


Bonjour,

Ce code ne fait pas ce que tu cherches ?

 try
    {
        ...
    }
    catch( IOException ioe )
    {
        TraiterErreur();
    }
    catch( NullPointerException npe )
    {
        TraiterErreur();
    }
    finally ...

Eric

Répondre à