Alle Frameworks
ANJUNAR / OPEN SOURCE

Scala Reflect

Zur Compile-Zeit erzeugte Typmetadaten für JVM und Scala.js.

01

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.

02

Was es kann.

01

Generierte Deskriptoren

Klassennamen, Properties, Konstruktoren, Basistypen und Annotationen zur Compile-Zeit erfassen.

02

Typisierter Property-Zugriff

Getter und Setter aus Selektoren erzeugen statt Felder per Reflection zu suchen.

03

Plattformübergreifende Metadaten

Dasselbe Deskriptormodell in JVM- und Scala.js-Anwendungen nutzen.

03

Installation

Zum Projekt hinzufügen
// JVM
libraryDependencies += "com.anjunar" %% "scala-reflect" % "1.1.2"

// Scala.js
libraryDependencies += "com.anjunar" %%% "scala-reflect" % "1.1.2

Paket: com.anjunar:scala-reflect

04

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.

Quellcode
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) // ...String

Einen typisierten Accessor erzeugen

Aus einem Selektor entstehen Getter und Setter ohne Feldsuche zur Laufzeit.

Quellcode
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)      // dark
05

Bewusst 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.

Dein nächster Schritt

Mach es zu deinem Werkzeug.

Sorgfältig gebaut mit Scala JS UI.Impressum