Variable in Laufzeit-Typ aus existenziell typisiertem TypeCast in Scala @ umwande

Dieser Thread adressiert wie man @ benutTypeTag, um den Laufzeittyp der Typparameter abzurufen, wenn sie mit @ verwendet werdeExistential Art. Ein anderer Thread hat behandelt, wie eine Variable in ihren Laufzeit-Typ umgewandelt wird, der aus @ abgerufen wurdTypeTag.

Meine Frage baut auf den oben genannten Threads auf (eine Art Kombination der beiden Szenarien). Aus Gründen der Übersichtlichkeit wurden Teile des Codes aus den beiden Threads dupliziert.

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def cast[A](a: Any, tt: TypeTag[A]): A = a.asInstanceOf[A]
cast: [A](a: Any, tt: reflect.runtime.universe.TypeTag[A])A

scala> abstract class Animal[T](implicit tt: TypeTag[T]) {
     |   val ttag = tt
     | }
defined class Animal

scala> case object Dog extends Animal[Int]
defined object Dog

scala> case object Cat extends Animal[String]
defined object Cat

scala> val aa: List[(Animal[_], Any)] = List((Dog, 5), (Cat, "stringgg"), (Dog, 2))                                                                                                               
aa: List[(Animal[_], Any)] = List((Dog,5), (Cat,stringgg), (Dog,2))

scala> aa(0)._1.ttag
res25: reflect.runtime.universe.TypeTag[_] = TypeTag[Int]

scala> aa(1)._1.ttag
res26: reflect.runtime.universe.TypeTag[_] = TypeTag[String]

scala> cast(aa(0)._2, aa(0)._1.ttag)
res27: Any = 5

scala> cast(aa(1)._2, aa(1)._1.ttag)
res28: Any = stringgg

urz gesagt, die letzten beiden Zeilen:cast(value, TypeTag[_]) gibt immer einen Wert vom Typ @ zurüAny. Aber meine Absicht ist es, diese Werte in den richtigen Typ umzuwandeln, der in @ gespeichert isDog|Cat.ttag, was leider nicht @ iTypeTag[Int] oderTypeTag[String] aberTypeTag[_] aufgrund der Verwendung vonexistential Art. Gibt es eine Lösung dafür?

Edit 1:

Trotz des Feldesttag ist vom TypTypeTag[_], ttag.tpe hat den richtigen "Typ" (aber als Instanz vonreflect.runtime.universe.Type). Ist es möglich das @ zu benutztypetag.tpe auf den richtigen Typ umwandeln?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage