【发布时间】:2017-05-20 11:57:01
【问题描述】:
我试图有一个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() 的更好方法?
【问题讨论】:
-
你不能在异常中使用泛型类型!
-
使用可变参数时,
acceptableExceptions的类型为Class[]。 -
你为什么尝试
e instanceOf acceptableExceptions与一个类数组?您演示了如何遍历数组并在另一个 sn-p 中调用Class.isInstance方法。 -
而不是String数组,传递Class[] ?
-
我只是懒得写for循环行了...所以只要找到问题。
e instanceOf classVariable不工作,但calssVariable.isInstance(e)工作。