Konstruktoren und Parameter
Jeder Konstruktor kommt mit seinen Parametern: Name, Typ, Annotationen und ob es einen Default gibt. Das braucht eine Factory, um einen Konstruktor ohne Raten aufzurufen.
Namen, Typen und Defaults
hasDefault sagt, ob ein Aufrufer einen Parameter weglassen darf. Der primäre Konstruktor ist markiert; sekundäre Konstruktoren stören nicht.
- number
- java.lang.String
- amount
- scala.math.BigDecimal · has default
- currency
- java.lang.String · has default
Primär und sekundär
Eine Klasse mit Hilfskonstruktoren listet sie alle. isPrimary unterscheidet sie, parameterNames und parameterCount beschreiben jeden.
- (x, y)
- primary
Von Parametern zur Instanz
Der Deskriptor beschreibt, er ruft nicht auf. Case Classes erzeugst du mit createInstance, andere Klassen über eine an den Deskriptor gebundene Factory.
- ReflectMacros.createInstance[Invoice]("R-1", BigDecimal(90), "EUR")
- Invoice(R-1,90,EUR)
hasDefault sagt, dass es einen Default gibt, und defaultIndex, welchen; createInstance braucht trotzdem jedes Argument. Übergib die Werte selbst, wenn du Instanzen aus unvollständigen Eingaben baust.