Ich habe ein Objekt, das wie folgt aussieht:Wie kann ich alle Objektwerte und Subobjektwerte mithilfe von Reflektion in Scala erhalten?
object Settings {
final val Host = "host"
final val Protocol = "protocol"
object User {
final val Name = "username"
final val Password = "password"
}
object Subject {
final val Query = "query"
final val Predicate = "predicate"
}
}
Was ich möchte, ist wie membersAsHash(classOf[CollectionSettings])
etwas zu tun und einen Hash) aller der vals erhalten, die ich in dem Objekt deklariert haben:
[
Host => "host",
Protocol => "protocol",
Name => "username",
Password => "password",
Query => "query",
Predicate => "predicate"
]
Es wäre in Ordnung, wenn der Schlüssel eine Zeichenkette wäre, sogar der vollständige Paketname (zB com.example.Settings.User). Was ich wirklich brauche, sind die Werte. Wenn ich das also nur bekommen kann, ist das immer noch akzeptabel.
Das hat mir den Namen der Subobjekte bekommen, aber ich kann nicht scheinen, um herauszufinden, wie die vals zu erhalten, die zu jedem internen sind:
val optionsToCheck = {
import scala.reflect.runtime.{universe => ru}
val mirror = ru.runtimeMirror(getClass.getClassLoader)
val subObjects = ru.typeOf[CollectionSettings.type].declarations.filter(_.isModule)
subobjects.map(o => mirror.reflectModule(o.asModule).instance.asInstanceOf[Object].toString).toList
}
Das war super effektiv. Vielen Dank! –
@TravisBrown: Wie kann ich es für nicht-endgültige Mitglieder arbeiten lassen? –
@VenkatSudheerReddyAedama Wahrscheinlich eine neue Frage wert - wenn du eine postest, kann ich versuchen, heute Abend einen Blick darauf zu werfen. –