Generics
Einfache Reflection sagt dir, dass eine Methode T zurückgibt. scala-universe sagt dir, was T für die Klasse ist, nach der du gefragt hast.
Mit konkretem Typ überschrieben
Die Unterklasse überschreibt eine generische Methode. Die aufgelöste Methode ist die der Unterklasse, und ihr Rückgabetyp ist konkret.
Generisch deklariert, konkret aufgelöst
Auch ohne Überschreibung geerbte Member werden gegen den Ausgangstyp aufgelöst: Felder, Rückgabetypen und Parameter.
findMethod vergleicht die JVM-Signatur; ein Parameter vom Typ E wird deshalb als classOf[Object] gefunden. Der aufgelöste parameterType sagt dann User.
Beim konkreten Typ beginnen
Wer die generische Klasse selbst auflöst, lässt ihre Typvariablen ungebunden. In 1.0.4 ist die Rohklasse einer ungebundenen Variable die Klasse, die sie deklariert, nicht ihre Schranke.
Code, der raw oder name eines Member-Typs liest, sollte bei einer konkreten Klasse wie UserRepository beginnen. Der Start bei Repository[?] liefert eine Typvariable, deren Rohklasse nichts über ihre Werte sagt.
Collections kennen ihre Elemente
typeArguments eines parametrisierten Typs sind selbst ResolvedClasses. Darüber erzeugt json-mapper für jedes JSON-Array den richtigen Elementtyp.