注意:这是关于类型转换的问题,而不是类型转换。请停止更改标题。
我想编写一个通用函数,它根据运行时指定的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]
)?