回答

16

您可以使用ClassTag,如this answer

但我更喜歡這種方法:

def myFunc(recover: PartialFunction[Throwable, Unit]): Unit = { 
    try { 
    println("Hello world") // or something else 
    } catch { 
    recover 
    } 
} 

用法:

myFunc{ case _: MyException => } 

使用ClassTag

import scala.reflect.{ClassTag, classTag} 

def myFunc[A <: Exception: ClassTag](): Unit = { 
    try { 
    println("Hello world") // or something else 
    } catch { 
    case a if classTag[A].runtimeClass.isInstance(a) => 
    } 
} 

還要注意的是,一般你應該使用Tryrecover方法:Try只會捕獲NonFatal例外。

def myFunc(recover: PartialFunction[Throwable, Unit]) = { 
    Try { 
    println("Hello world") // or something else 
    } recover { 
    recover 
    }.get // you could drop .get here to return `Try[Unit]` 
}