2

クラス オブジェクトに含まれるマニフェスト型の型パラメーターを取得することは可能ですか。

私はそれを正しく説明していないかもしれないので、私が言いたいのは、このタイプを考えると.

Resultset[Band[Coldplay]]

タイプを持つクラスインスタンスを取得できるように、完全なタイプを表すマニフェストが必要です

Class[Resultset[Band[Coldplay]]]

私が得ることができるのは

Class[Resultset[_]]
4

1 に答える 1

4

マニフェストをクラスに組み込むことができます。

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]]]
于 2012-12-11T17:43:31.857 に答える