繁体   English   中英

带有参数化类型的Scala体现

[英]Scala Manifested with Parameterized Types

是否有可能获得包含在类对象中的清单类型的类型参数。

我可能没有正确地描述它,所以我的意思是给定这种类型。

Resultset[Band[Coldplay]]

我想要一个代表完整类型的manfiest,以便应该可以获取具有该类型的类实例

Class[Resultset[Band[Coldplay]]]

我所能得到的是

Class[Resultset[_]]

您可以将清单构建到类中:

case class Manifesting[A](value: A)(implicit val mf: Manifest[A]) { }

scala> Manifesting(5).mf.erasurescala> Manifesting(5).mf.erasure
res1: Class[_] = int

或者,您可以将所有清单构建为方法:

def nested[A, B[A]](x: B[A])(implicit ma: Manifest[A], mb: Manifest[B[A]]) = 
  (ma.erasure, mb.erasure)

scala> nested(List("fish"))
res2: (Class[_$1], Class[_$1]) forSome { type _$1; type _$1 } =
  (class java.lang.String,class scala.collection.immutable.List)

或者,在Scala 2.10中,您可以使用TypeTag

def nest2[A: scala.reflect.runtime.universe.TypeTag](x: A) = 
  implicitly[scala.reflect.runtime.universe.TypeTag[A]]

scala> nest2(Right(List("salmon","herring")))
res3: reflect.runtime.universe.TypeTag[scala.util.Right[Nothing,List[String]]] =
  TypeTag[scala.util.Right[Nothing,List[String]]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM