Zum Inhalt springen
Anjunar/ DOCS

Instanzen erzeugen

Zwei Wege, Objekte ohne Laufzeit-Reflection zu erzeugen: ein Makro, das den Konstruktor einer Case Class aufruft, und eine Factory, die an einen Deskriptor gebunden ist.

Case Classes

createInstance

Die Argumente gehen der Reihe nach an den primären Konstruktor.

ReflectMacros.createInstance[Person]("Ada", 37)
Person(Ada,37)
scala
val person = ReflectMacros.createInstance[Person]("Ada", 37)
Factories

An einen Deskriptor gebunden

bindFactory hängt eine Funktion an, die eine Instanz erzeugt. createInstance auf dem Deskriptor, der Registry oder einem Class Loader ruft sie auf.

query.createInstance()
Some(Query(select * from dual))
reflect[Query].createInstance()
None
scala
val query = ReflectMacros.reflect[Query].bindFactory(() => Query("select * from dual")) query.createInstance() // Some(Query(select * from dual))