变量中的Java捕获块异常类
我有一个要求,我正在编写一个重试逻辑,我需要变量中的Java捕获块异常类,java,performance,Java,Performance,我有一个要求,我正在编写一个重试逻辑,我需要捕获异常,这取决于将在参数中传递的函数,因此在java中是否可以确定捕获的异常是否与在参数中传递的异常匹配 基本上: retryfunc(func,Exception... retryableexceptions,int retries){ try { func.apply(); }catch(...){}//How to validate if exception is of retryable type ? }
捕获异常
,这取决于将在参数中传递的函数,因此在java
中是否可以确定捕获的异常是否与在参数中传递的异常
匹配
基本上:
retryfunc(func,Exception... retryableexceptions,int retries){
try {
func.apply();
}catch(...){}//How to validate if exception is of retryable type ?
}
我假设您正在传递一个异常列表,这些异常是“可重试的异常”,您想知道由该方法调用生成的异常是否是其中之一 如果是这种情况,则可以执行以下操作:
retryfunc(func, Exception... retryableExceptionList, int retries){
try {
func.apply();
}catch(Exception e){
for (Exception retryableException : retryableExceptionList) {
if (e.getClass().isAssignableFrom(retryableException.getClass())) {
System.out.println("We need to retry buddy..");
break;
}
}
}
}
等等,什么?您正在传入一个异常数组,并且希望以某种方式匹配数组中的元素,以查看它是否是需要对其进行额外处理的异常之一,或者是否要重试?这些异常与任何其他系统异常的区别是什么?是否有一个
RetryableException
类继承了这些异常?我想知道,当所有这些都迫使我们逐个关注具体类型的异常时,为什么会出现异常数组?也许你有一个多挡块。我认为如果你提到这个方法是如何从外部调用的,那会更好。你的意思是你要预先创建一些异常对象,调用这个方法,你想让它只捕获已经提供的异常?或已提供的类别?没什么意义。无论如何,在Java中是不可实现的,除非您自己通过instanceof
来实现它。这根本不是我的想法。你需要重新考虑这一切。试试Class.isInstance(e)