Scala Reflect
Zur Compile-Zeit erzeugte Typmetadaten für JVM und Scala.js.
Die Idee
Scala Reflect erzeugt Klassen- und Property-Deskriptoren zur Compile-Zeit. Anwendungen können Typen untersuchen und typisierte Accessors auf der JVM oder in Scala.js verwenden, ohne auf Runtime Reflection angewiesen zu sein.
Was es kann.
Generierte Deskriptoren
Klassennamen, Properties, Konstruktoren, Basistypen und Annotationen zur Compile-Zeit erfassen.
Typisierter Property-Zugriff
Getter und Setter aus Selektoren erzeugen statt Felder per Reflection zu suchen.
Plattformübergreifende Metadaten
Dasselbe Deskriptormodell in JVM- und Scala.js-Anwendungen nutzen.
Installation
// JVM libraryDependencies += "com.anjunar" %% "scala-reflect" % "1.1.2" // Scala.js libraryDependencies += "com.anjunar" %%% "scala-reflect" % "1.1.2
Paket: com.anjunar:scala-reflect
Direkt loslegen.
Mit ReflectMacros.reflect einen Deskriptor erzeugen, seine Properties untersuchen oder zum Lesen und Schreiben Accessors anfordern.
Einen generierten Deskriptor untersuchen
Das Makro erfasst die Struktur von Person beim Kompilieren; der Deskriptor steht zur Laufzeit bereit.
import reflect.macros.ReflectMacros
case class Person(name: String, age: Int)
val descriptor = ReflectMacros.reflect[Person]
println(descriptor.simpleName) // Person
println(descriptor.properties.map(_.name).mkString(", "))
val name = descriptor.getProperty("name").get
println(name.propertyType.typeName) // ...StringEinen typisierten Accessor erzeugen
Aus einem Selektor entstehen Getter und Setter ohne Feldsuche zur Laufzeit.
import reflect.macros.ReflectMacros
case class Settings(var theme: String, version: Int)
val theme = ReflectMacros.makeAccessor[Settings, String](_.theme)
val settings = Settings("light", 1)
println(theme.get(settings)) // light
if (theme.hasSetter) theme.set(settings, "dark")
println(settings.theme) // darkBewusst gestaltet.
Makros extrahieren Struktur während der Kompilierung und legen sie in kompakten Deskriptoren ab. Mapping, Validierung und UI-Code können die Metadaten ohne Runtime-Classpath-Scanning nutzen.
Mach es zu deinem Werkzeug.
Weiter entdecken.
Scala.js UI
Ein Scala-3- und Scala.js-UI-Framework für serverseitig gerenderte Anwendungen.
↗Hibernate DDL Manager
Kontrollierte Schemaentwicklung auf Basis von Hibernate-Metadaten.
↗JSON Mapper
JSON-Mapping für bestehende Objektgraphen und Domänenmodelle.
↗Scala Universe
Eine aufgelöste Sicht auf JVM-Typen, Generics und Annotationen.
↗Scala JS Ember
Ein modularer Rich-Text-Editor auf Basis eines unveränderlichen Dokumentmodells.
↗