Je voudrais faire une classe de cas Bla
qui prend un paramètre de type A
et qui connaît le type de A
lors de l'exécution (il le stocke dans son champ info
).TypeTag pour les classes de cas
Ma tentative est illustrée dans l'exemple ci-dessous. Le problème est que cet exemple ne compile pas.
case class Bla[A](){
val info=Run.paramInfo(this) // this does not compile
}
import scala.reflect.runtime.universe._
object Run extends App{
val x=Bla[Int]
def paramInfo[T](x:T)(implicit tag: TypeTag[T]): String = {
val targs = tag.tpe match { case TypeRef(_, _, args) => args }
val tinfo=s"type of $x has type arguments $targs"
println(tinfo)
tinfo
}
paramInfo(x)
}
Cependant, quand je commente val info=Run.paramInfo(this)
alors le programme fonctionne très bien et impressions:
type de Bla() est de type arguments Liste (Int)
Y at-il un moyen de faire cet exemple ci-dessous compiler? (ou d'une autre manière atteindre le même objectif, c'est-à-dire qu'une classe de cas est consciente du type de son type type?)
Merci, cela a fonctionné. – jhegedus