Generics
Eine generische Klasse behält ihre Typparameter mit ihren Schranken, und ein angewandter Typ behält seine Argumente. Beides ist in Scala.js sichtbar, wo es die generischen Signaturen der JVM nicht gibt.
Typvariablen mit Schranken
typeParameters hält einen TypeVariableDescriptor pro Parameter; seine bounds sind die Namen seiner oberen Schranken.
- E
- scala.Nothing, demo.Entity
- K
- scala.Nothing, scala.Any
Angewandte Typen
reflectType eines angewandten Typs liefert einen ParameterizedTypeDescriptor. Sein rawType ist der ClassDescriptor, seine typeArguments die Argumente der Reihe nach.
- reflectType[Map[String, List[Int]]].typeName
- scala.collection.immutable.Map[java.lang.String, scala.collection.immutable.List[scala.Int]]
- typeArguments(1).typeName
- scala.collection.immutable.List[scala.Int]
Generische Property-Typen
Der propertyType einer Property ist ebenfalls ein TypeDescriptor; ein List[String]-Feld nennt dir seinen Elementtyp.
- reflect[Box[?]].getProperty("value").map(_.propertyType.typeName)
- Some(T)
Der Deskriptor einer generischen Klasse beschreibt ihre Deklaration: eine Property vom Typ T sagt T. Reflektiere den angewandten Typ mit reflectType, wenn du das Argument brauchst.