Scala-Klasse.getFields
Für die Zwecke meiner app muss ich in der Lage sein, um herauszufinden, eine Liste der Felder einer Typ (kein Beispiel) und die Typen der Felder in der runtime. Bisher war ich nur in der Lage, um eine Liste der Methoden der Fall-Klasse mit Getter mit classOf[MyCaseClass].getMethods
und nichts nützlich, aus einer einfachen Klasse. Bin ich etwas fehlt? Gibt es irgendwelche Reflexion Bibliotheken für, solche Zwecke? Wie das richtig gemacht?
- Ich bin verwirrt - der Titel sagt Felder, und dann gehen Sie nach Methoden. Was wollen Sie?
- Im Zusammenhang stackoverflow.com/q/7477248/97777
- Danke Duncan, ich werde das prüfen. Ich ging auf der Suche nach Methoden, Eigenschaften zu finden, die Namen und Typen entsprechend Ihrer Felder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit Scala 2.10 Reflexion:
Den zurückgegebenen Symbole enthalten alle Typ-Informationen, wie z.B.:
collect{ case m: ru.MethodSymbol if m.isGetter => m }
gibt die Warnung "abstract Art-Muster ru.MethodSymbol deaktiviert ist, da es beseitigt, indem erasure" für dieMethodSymbol
. Sicher nicht so weit, wie Sie zu beseitigen.collect{ case m if ru.MethodSymbolTag.runtimeClass.isInstance(m) && m.asInstanceOf[ru.MethodSymbol].isGetter => m }
Möchten Sie vielleicht einen Blick auf diese Dokument auf Spiegel-scala.
getMethods
ist eine Methode aus der Java-reflection. Was kannst du nicht dort finden? Aus der Javadoc:Du könntest Lesen Sie mehr über Java reflection.
Beachten Sie, dass nicht alle Typ-Informationen werden zur Laufzeit verfügbar, da der Löschung.
getMethods
gibt eine Reihe von Methoden generiert, die ausgefiltert werden müssen, und ich hoffte, dass es existiert eine konsistente Algorithmus für, die. Denke, ich werde analysieren, die Spiegel - code.