注:これは型キャストに関する質問であり、型キャストに関する質問ではありません。タイトルの変更はやめてください。
実行時に指定されたものに基づいてretrieve[F]
を返すジェネリック関数を書きたい:List[F]
F
trait Foo
trait Bar extends Foo
trait Baz extends Foo
def retrieve[F <: Foo](implicit m: Manifest[F]): List[F] = m.erasure match {
case x if x.isAssignableFrom(classOf[Bar]) => List[Bar]().asInstanceOf[List[F]]
case x if x.isAssignableFrom(classOf[Baz]) => Nil
case _ => Nil
}
これを行うためのよりタイプセーフな方法はありますか(つまり、マニフェストに頼らず、isAssignableFrom
各戻り値をとしてキャストすることなくList[F]
)?