模式匹配Scala中的所有子类

时间:2014-01-20 08:06:07

标签: scala inheritance pattern-matching subclass

我正在使用第三方库,其中异常导致类型为RETCODE_ERROR的类。这是层次结构的选择。

Return Code Class hierarchy

不确定类是否实现Throwable,我希望对超类RETCODE_ERROR进行模式匹配。

try {
  // perform action here
} catch {
  case e.asInstanceOf[RETCODE_ERROR] => // handle exception
}

这是否有效,还是有更好的方法?

2 个答案:

答案 0 :(得分:6)

所有的荣誉应该实际上转到@Jesper:

try {
  // perform action here
} catch {
  case e: RETCODE_ERROR => // handle exception
}

如果您希望与某些子集类匹配,可以很好地枚举它们:

try {
  // perform action here
} catch {
  case e: (RETCODE_NO_DATA | RETCODE_ALREADY_DELETED) => // handle exception
}

答案 1 :(得分:0)

建议不要使用asInstanceOf。而且,这段代码不对。

  

案例e.asInstanceOf [RETCODE_ERROR] => //处理异常

相反,你可以使用这样的模式匹配:

try {
  // do something
} catch {
  case e: RETCODE_ERROR => // handle it
}