我正在编写可以捕获特定类型的异常的函数 .
def myFunc[A <: Exception]() {
try {
println("Hello world") // or something else
} catch {
case a: A => // warning: abstract type pattern A is unchecked since it is eliminated by erasure
}
}
在这种情况下绕过jvm类型擦除的正确方法是什么?
2 回答
您可以在this answer中使用
ClassTag
.但我更喜欢这种方法:
用法:
使用
ClassTag
:另请注意,一般情况下,您应该使用
Try
和recover
方法:Try
将仅捕获NonFatal例外 .对于每种类型检查(例如
case a: A
),JVM需要相应的class
对象来执行检查 . 在您的情况下,JVM没有类对象,因为A
是一个变量类型参数 . 但是,您可以通过隐式将Manifest[A]
传递给myFunc
来获取有关A
的其他信息 . 作为简写,您只需将: Manifest
添加到A
的类型声明中: