OVH Cloud OVH Cloud

Comment fait-on un "rethrow" ??

2 réponses
Avatar
Zouplaz
Bonsoir, je patine un peu avec les exceptions

si j'ai ça (c'est un exemple) :

public void maMethode() throws Pop3Exception
try {
chRead = (char)inputStream.read();
if(bidule == 1)
throw new Pop3Exception("Timeout connexion !");
}
catch (IOException e)
{
// Que faire ici ???
}

Si je comprends bien, le catch va intercepter non seulement une exception
issue de inputStream.read() mais AUSSI l'exception que je lève moi même...

Est-ce vrai ?

Si c'est le cas, ça m'intéresse pas trop car je voudrais que l'exception
soit remonte la pile d'appels...

Le problème c'est que si je supprime le bloc try/catch j'obtiens une erreur
de compilation car maMethode reporte les Pop3Exception mais pas les
IOException.

J'ai bien sur, dérivé Pop3Exception de Exception, aurais-je du dériver de
IOException ?

Merci !

2 réponses

Avatar
Willy
Zouplaz wrote:
Bonsoir, je patine un peu avec les exceptions

si j'ai ça (c'est un exemple) :

public void maMethode() throws Pop3Exception
try {
chRead = (char)inputStream.read();
if(bidule == 1)
throw new Pop3Exception("Timeout connexion !");
}
catch (IOException e)
{
// Que faire ici ???
}

Si je comprends bien, le catch va intercepter non seulement une exception
issue de inputStream.read() mais AUSSI l'exception que je lève moi même...

Est-ce vrai ?


Si Pop3Exception étends IOException, oui, sinon, l'exception est
remontée dans la pile

Si c'est le cas, ça m'intéresse pas trop car je voudrais que l'exception
soit remonte la pile d'appels...

Le problème c'est que si je supprime le bloc try/catch j'obtiens une erreur
de compilation car maMethode reporte les Pop3Exception mais pas les
IOException.

J'ai bien sur, dérivé Pop3Exception de Exception, aurais-je du dériver de
IOException ?


Justement non, si tu avais étendu IOException, la Pop3Exception aurait
été "catchée".

Merci !


--
Willy

Avatar
Erwan David
Zouplaz écrivait :

Bonsoir, je patine un peu avec les exceptions

si j'ai ça (c'est un exemple) :

public void maMethode() throws Pop3Exception
try {
chRead = (char)inputStream.read();
if(bidule == 1)
throw new Pop3Exception("Timeout connexion !");
}
catch (IOException e)
{
// Que faire ici ???
}

Si je comprends bien, le catch va intercepter non seulement une exception
issue de inputStream.read() mais AUSSI l'exception que je lève moi même...

Est-ce vrai ?

Si c'est le cas, ça m'intéresse pas trop car je voudrais que l'exception
soit remonte la pile d'appels...

Le problème c'est que si je supprime le bloc try/catch j'obtiens une erreur
de compilation car maMethode reporte les Pop3Exception mais pas les
IOException.

J'ai bien sur, dérivé Pop3Exception de Exception, aurais-je du dériver de
IOException ?


Dans ce cas ton catch ne va pas la récupérer puisque c'est *pas* une
IOException.

Et si tu sais pas quoi faire de ton IOException tu la laisse remonter
en déclarant IOException dans la clause throws.