【发布时间】:2012-06-29 01:34:19
【问题描述】:
sealed class A
class B1 extends A
class B2 extends A
假设我们有一个 A 类的对象列表:
val l: List[A] = List(new B1, new B2, new B1, new B1)
我们要过滤掉 B1 类型的元素。 然后我们需要一个谓词,可以使用以下两种替代方法:
l.filter(_.isInstanceOf[B1])
或者
l.filter(_ match {case b: B1 => true; case _ => false})
就个人而言,我更喜欢第一种方法,但我经常阅读,应该更频繁地使用match-case 语句(原因我不知道)。
因此,问题是:使用isInstanceOf 代替match-case 语句是否有缺点?什么时候应该使用哪种方法(这里应该使用哪种方法以及为什么)?
【问题讨论】: