Java 如何捕获动态指定的异常
背景是我有多个例外,我想尝试。这些可以动态指定吗Java 如何捕获动态指定的异常,java,scala,Java,Scala,背景是我有多个例外,我想尝试。这些可以动态指定吗 def retryOn(e:Class[_])(n: Int)(block:() => Unit):Unit = { try { block() } catch { case e1: Throwable => if (n > 1 && e1.isInstanceOf[e.type]) { retryOn(e)(
def retryOn(e:Class[_])(n: Int)(block:() => Unit):Unit = {
try {
block()
} catch {
case e1: Throwable =>
if (n > 1 && e1.isInstanceOf[e.type]) {
retryOn(e)(n - 1)(block)
}
else throw e1
}
}
从上面的尝试来看,这不起作用,因为抛出的e1根本没有任何
debug
或类型信息 e.type
是Class
,因此e1.isInstanceOf[e.type]
不会执行您想要的操作。您需要e.isInstance(e1)
。y您不使用Try block而不是Try{}catch{},它包含您需要的所有内容,您可以在重试e1之前记录或调试它;)