私はこのようなクラス構造を持っています
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 のサブクラスを追加しても更新する必要がないソリューションが必要です。