Properties für APIs
PropertySupport verbindet einen Deskriptor mit seinem Accessor. Das ist der Griff, den eine API braucht, wenn Nutzer Properties im Code benennen: Schemas, Formulare, Filter, Query-Builder.
Eine Property
makeProperty
Das Ergebnis kennt seinen Namen, weiß, ob es schreibbar ist, und liest und schreibt eine Instanz.
- property.name
- name
- property.isWriteable
- false
- property.get(Person("Ada", 37))
- Ada
- makeProperty[Settings, String](_.theme).isWriteable
- true
scala
val property = PropertySupport.makeProperty[Person, String](_.name)
property.get(Person("Ada", 37))
So funktionieren json-mapper-Schemas
EntitySchema.property(_.title) ist ein Inline-Aufruf von makeProperty. Das Schema bekommt Name und Accessor der Property aus dem Selektor, geprüft vom Compiler.
Alle Properties
extractPropertiesWithAccessors
Jede Property eines Typs mit ihrem Accessor, geerbte eingeschlossen.
- id
- 1
- createdBy
- system
- title
- Reflection
scala
trait Audited {
val createdBy: String = "system"
}
class Document(val id: String, val title: String) extends Audited
val document = Document("1", "Reflection")
PropertySupport.extractPropertiesWithAccessors[Document]
.filterNot(_.name == "##") // 1.1.4 lists the hash code method as well
.foreach(property => println(s"${property.name} = ${property.get(document)}"))