Scala 2.10 Reflexion, wie extrahiere ich das Feld Werte aus einer Fall Klasse, d.h. Feldliste von Fall Klasse
Wie kann ich extrahieren Sie die Werte von Feldern aus einer Fall-Klasse in scala mit der neuen reflection-Modell in scala 2.10?
Zum Beispiel, indem die unten nicht, ziehen Sie die Feld-Methoden
def getMethods[T:TypeTag](t:T) = typeOf[T].members.collect {
case m:MethodSymbol => m
}
Ich Plane die Pumpe in
for {field <- fields} {
currentMirror.reflect(caseClass).reflectField(field).get
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
MethodSymbol
hat eineisCaseAccessor
Methode, mit der Sie genau dies zu tun:Nun können Sie die folgenden schreiben:
Und Sie bekommen nur die Methode, die Symbole, die Sie wollen.
Wenn Sie wollen einfach nur die aktuelle Feld-Namen (nicht den
value
Präfix) und Sie wollen, dass Sie in der gleichen Reihenfolge dann:.sorted
nachmembers
(siehe dieMemberScope
- Dokumentation für details).case class
esSymbols
ist einTrait
so seine Komponenten - specifiallyMethodSymbol
- kann nicht importiert werden. Kann Sie erweitern das Beispiel um die imports vonSymbols
undMethodSymbol
?scala.reflect.runtime.universe._
importieren.Wenn Sie wollen, um Liebhaber, die Sie bekommen können, um durch die Untersuchung der Konstruktor symbol. Dieser code funktioniert auch, wenn der Fall-Klasse Typ in Frage, hat mehrere Konstruktoren definiert.
scala.ScalaReflectionException: <none> is not a term
im AusdruckconstructorSymbol.asTerm.alternatives
. Die Dokumentation Kommentar fürdeclaration
bezieht sich aufOverloadedSymbol
, aber keine solche Entität zu existieren scheint.this.type
von der eine Eigenschaft, als ein obertyp von der Fall-Klasse in Frage.case class P(i: Int)(j: Int)
.