J'essayais d'avoir une méthode handleException
, qui peut prendre un objet d'exception et une liste de classes d'exceptions acceptables pour vérifier si l'exception est acceptable et peut être réessayée.Comment passer une liste de classe en tant que paramètre?
void handleException(Exception e, String... acceptableExceptionNames)
throws MyException {
boolean isRetryable = false;
for(String acceptableExceptionName: acceptableExceptionNames) {
try {
if (Class.forName(acceptableExceptionName).isInstance(e)) {
isRetryable = true;
break;
}
} catch (ClassNotFoundException e1) {
continue;
}
}
if (isRetryable) {
// log retryable
} else {
// log error
}
throw new MyException(isRetryable, "Failed");
}
Le paramètre je passe un String... classNames
au lieu de Class<? extends Exception> classes
, parce que si je fais quelque chose comme ceci:
void handleException(
Exception e,
Class<? extends Exception>... acceptableExceptions)
throws MyException {
for (Class acceptableException : acceptableExceptions) {
if (e instanceOf acceptableException) {}
}
}
L'IDE se plaindront unknown class acceptableException
Quelqu'un sait s'il y a un moyen pour passer Class<?>
? Ou une meilleure façon d'éviter d'utiliser String classNames
et Class.forName()
?
Vous ne pouvez pas utiliser un type générique dans Exceptions! – Michael
Lorsque vous utilisez varargs, le type 'acceptableExceptions' est' Class [] '. – chrylis
Pourquoi avez-vous essayé 'e instanceOf acceptableExceptions' avec un tableau de classes? Vous avez démontré que vous savez comment parcourir un tableau et appeler la méthode 'Class.isInstance' dans l'autre extrait. – user2357112