Я пытался использовать метод handleException
, который может взять объект исключения и список допустимых классов исключений, чтобы проверить, является ли исключение приемлемым и может быть повторено.Как передать список параметров класса?
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");
}
Параметр прохожу в это String... classNames
вместо Class<? extends Exception> classes
, потому что если я делаю что-то вроде этого:
void handleException(
Exception e,
Class<? extends Exception>... acceptableExceptions)
throws MyException {
for (Class acceptableException : acceptableExceptions) {
if (e instanceOf acceptableException) {}
}
}
В среде IDE будет сетовать unknown class acceptableException
Любой знает, если есть способ пройти Class<?>
? Или лучший способ избежать использования String classNames
и Class.forName()
?
Вы не можете использовать общий тип в Исключениях! – Michael
Когда вы используете varargs, тип 'acceptExceptions' является' Class [] '. – chrylis
Почему вы попробовали 'e instanceOf приемлемыеExceptions' с массивом классов? Вы продемонстрировали, что знаете, как перебирать массив и вызывать метод Class.isInstance в другом фрагменте. – user2357112