注意:這是一個關於型套管,而不是類型鑄造的問題。請停止更改標題。如何避免型套
我想編寫一個通用功能retrieve[F]
基於在運行時指定的F
它返回一個List[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]
)?消除鑄件
我沒有看到任何鑄件 –
更新了一個鑄造的例子。 – earldouglas
我想你可以通過恢復上次編輯來避免它。有什麼意義? –