3 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
這個(gè)答案使用 Manifest
-API,它在Scala2.10中被廢棄。請(qǐng)參閱下面的答案,以獲得更多最新解決方案。
scala.collection.immutable.List
Int
.
object Registry { import scala.reflect.Manifest private var map= Map.empty[Any,(Manifest[_], Any)] def register[T](name: Any, item: T)(implicit m: Manifest[T]) { map = map.updated(name, m -> item) } def get[T](key:Any)(implicit m : Manifest[T]): Option[T] = { map get key flatMap { case (om, s) => if (om <:< m) Some(s.asInstanceOf[T]) else None } }}scala> Registry.register("a", List(1,2,3))scala> Registry.get[List[Int]]("a")res6: Option[List[Int]] = Some(List(1, 2, 3))scala > Registry.get[List[String]]("a")res7: Option[List[String]] = None
Manifest

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
Typeable
scala> import shapeless.syntax.typeable._import shapeless.syntax.typeable._ scala> val l1 : Any = List(1,2,3)l1: Any = List(1, 2, 3)scala> l1.cast[List[String]]res0: Option[List[String]] = Nonescala > l1.cast[List[Int]]res1: Option[List[Int]] = Some(List(1, 2, 3))
cast
Typeable
添加回答
舉報(bào)