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