Zum Inhalt springen
Anjunar/ DOCS

Typ-Deskriptoren

reflectType beschreibt jeden Typ, nicht nur Klassen. Das Ergebnis ist ein TypeDescriptor, bei einem generischen Typ ein ParameterizedTypeDescriptor mit seinen Argumenten.

Parametrisiert

Argumente bleiben erhalten

Eine Box[String] ist nicht einfach eine Box. Matche auf ParameterizedTypeDescriptor, um Rohklasse und jedes Typargument zu erreichen.

reflectType[Box[String]].typeName
demo.Box[java.lang.String]
typeArguments
java.lang.String
reflect[Box[?]].typeParameterNames
T
scala
case class Box[T](value: T) ReflectMacros.reflectType[Box[String]] match case parameterized: ParameterizedTypeDescriptor => parameterized.rawType.simpleName // Box parameterized.typeArguments.map(_.typeName) case other => other.typeName
Varianten

Vier Arten von Deskriptor

Alle implementieren TypeDescriptor; Code, der nur Namen, Annotationen oder Basistypen braucht, muss nicht wissen, welchen er hält.

ClassDescriptor
Eine Klasse mit Properties, Konstruktoren und Flags.
ParameterizedTypeDescriptor(rawType, typeArguments)
Eine generische Klasse, angewandt auf Argumente.
TypeVariableDescriptor(name, bounds)
Ein Typparameter wie T, mit seinen Schranken.
ArrayTypeDescriptor(componentType)
Ein Array; sein Name endet auf [].