Bean-Properties
BeanIntrospector baut Properties aus JavaBean-Gettern und -Settern, mit dem gleichnamigen Feld, falls es eines gibt.
Modell
get, is und set
Jede Methode getX oder isX ohne Parameter ist eine Property x. Ein setX mit einem Parameter macht sie schreibbar.
scala
import com.anjunar.scala.universe.introspector.BeanIntrospector
class Person {
private var firstName: String = "Ada"
def getFirstName: String = firstName
def setFirstName(value: String): Unit = firstName = value
}
val model = BeanIntrospector.createWithType(classOf[Person])
val property = model.findProperty("firstName")
val person = new Person
println(property.propertyType.fullName) // java.lang.String
println(property.get(person)) // Ada
property.set(person, "Grace")
println(property.get(person)) // Grace
Properties
Was eine Property bietet
Bean- und annotierte Properties teilen AbstractProperty: ein Name, die Teile, aus denen sie entstand, und die Annotationen aller Teile.
- get(instance): Any
- Ruft den Getter auf oder liest ohne ihn das Feld.
- set(instance, value): Unit
- Ruft den Setter auf; wirft ohne ihn IllegalStateException.
- isWriteable: Boolean
- Ob ein Setter existiert.
- propertyType: ResolvedClass
- Typ des Getters oder Felds, Primitive gewrappt.
- field · getter · setter
- Die Teile, jedes davon darf null sein.
- annotations
- Annotationen von Feld, Getter und Setter zusammen.
Umfang
Deklariert oder geerbt
properties läuft über jede Methode der Hierarchie; declaredProperties nur über die der Klasse selbst.
Scala-vars sind keine Beans
Eine Scala-var wird zu name() und name_$eq, was BeanIntrospector nicht erkennt. Für Scala-Klassen nimm annotierte Properties oder ergänze @BeanProperty.
scala
import scala.beans.BeanProperty
class Person {
@BeanProperty var firstName: String = "Ada" // adds getFirstName and setFirstName
}