Considérons une situation où j'ai eu trois (ou plus) des moyens d'exécution d'un calcul, dont chacun peut échouer avec une exception. Pour tenter de chaque calcul jusqu'à ce que nous en trouver un qui réussit, j'ai été faire les opérations suivantes:
double val;
try { val = calc1(); }
catch (Calc1Exception e1)
{
try { val = calc2(); }
catch (Calc2Exception e2)
{
try { val = calc3(); }
catch (Calc3Exception e3)
{
throw new NoCalcsWorkedException();
}
}
}
Est-il un modèle qui parvient dans une jolie manière? Bien sûr, je pourrais envelopper chaque calcul dans une méthode d'assistance qui retourne null en cas d'échec, puis il suffit d'utiliser l' ??
de l'opérateur, mais est-il un moyen de le faire de façon plus générale (c'est à dire sans avoir à écrire une méthode d'assistance pour chaque méthode que je veux utiliser)? J'ai pensé à écrire une méthode statique à l'aide de médicaments génériques qui enveloppe toute méthode dans un try/catch et retourne null en cas d'échec, mais je ne suis pas sûr de comment je pourrais aller à ce sujet. Des idées?