J'ai une situation où j'essaie de récupérer un objet. Si la recherche échoue, plusieurs solutions de rechange sont en place, chacune pouvant échouer. Le code ressemble donc à:
try {
return repository.getElement(x);
} catch (NotFoundException e) {
try {
return repository.getSimilarElement(x);
} catch (NotFoundException e1) {
try {
return repository.getParentElement(x);
} catch (NotFoundException e2) {
//can't recover
throw new IllegalArgumentException(e);
}
}
}
Cela a l'air horriblement laid. Je déteste retourner null, mais est-ce mieux dans cette situation?
Element e = return repository.getElement(x);
if (e == null) {
e = repository.getSimilarElement(x);
}
if (e == null) {
e = repository.getParentElement(x);
}
if (e == null) {
throw new IllegalArgumentException();
}
return e;
Existe-t-il d'autres alternatives?
L'utilisation de blocs try-catch imbriqués est-elle un anti-modèle? est liée, mais les réponses sont du type "parfois, mais c'est généralement évitable", sans dire quand ni comment l'éviter.
NotFoundException
quelque chose d'exceptionnel?