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))