Zum Inhalt springen
Anjunar/ DOCS

Typen auflösen

Jeder Einstieg beginnt bei TypeResolver.resolve. Es nimmt jeden java.lang.reflect.Type, eine einfache Klasse ebenso wie einen parametrisierten Typ oder eine Typvariable, und liefert eine ResolvedClass.

Einstieg

Eine Klasse hinein, ein Modell heraus

name und fullName kommen von der Rohklasse. Das Modell selbst bleibt faul: Member, Hierarchie und Annotationen werden beim ersten Zugriff gelesen.

scala
import com.anjunar.scala.universe.TypeResolver val resolved = TypeResolver.resolve(classOf[String]) println(resolved.name) // String println(resolved.fullName) // java.lang.String println(resolved.raw) // class java.lang.String
Parametrisierte Typen

underlying behält, was raw vergisst

Eine ResolvedClass für List[User] hat zwei Sichten: underlying, der vollständige ParameterizedType, und raw, die gelöschte java.util.List. typeArguments sind selbst ResolvedClasses.

scala
val field = TypeResolver.resolve(classOf[UserRepository]).findField("items") val list = field.fieldType println(list.underlying.getTypeName) // java.util.List<example.User> println(list.raw) // interface java.util.List println(list.typeArguments.map(_.name).mkString(", ")) // User
Jeder Type

Variablen und Wildcards

rawType löscht jeden Type zu einer Klasse: einen parametrisierten Typ zu seinem Rohtyp, eine Wildcard zu ihrer oberen Schranke. Erst die Auflösung über eine konkrete Unterklasse ersetzt Typvariablen durch echte Typen.

resolve(aType: Type): ResolvedClass
Das zwischengespeicherte Modell eines Typs.
rawType(aType: Type): Class[?]
Die gelöschte Klasse eines beliebigen Types.
ResolvedClass.underlying: Type
Der Type, aus dem dieses Modell aufgelöst wurde.
ResolvedClass.raw: Class[?]
Die gelöschte Klasse dahinter.
ResolvedClass.typeArguments: Array[ResolvedClass]
Die tatsächlichen Argumente; leer bei einer einfachen Klasse.