Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何捕获动态指定的异常_Java_Scala - Fatal编程技术网

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之前记录或调试它;)