我有这样的班级结构
abstract class A
class B extends A
class C extends A
class D extends A
class E extends A
我收集了各种实例,例如:
val xs = List(new D, new B, new E, new E, new C, new B)
我的问题是,有没有一种优雅的方法可以从列表中过滤掉一些子类?
假设我想要除 B 和 C 之外的所有实例。我可以用一堆 isInstanceOf 来做到这一点,或者像这样使用 collect:
val ys = (xs collect {
case b: B => None
case c: C => None
case notBorC => notBorC
}).filter(_ != None).asInstanceOf[List[A]]
这可行,但感觉很尴尬,主要是因为过滤器和演员表。有没有更优雅的方式?更少的代码是首选,如果我添加更多 A 的子类,我希望有一个不需要更新的解决方案。