6
我有一個對象,看起來像這樣:如何在Scala中使用反射來獲取所有對象的vals和subobject vals?
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"
}
}
我想要做的是一樣的東西membersAsHash(classOf[CollectionSettings])
和接收的哈希)所有我的對象已經聲明瞭瓦爾斯的:
[
Host => "host",
Protocol => "protocol",
Name => "username",
Password => "password",
Query => "query",
Predicate => "predicate"
]
如果鍵是一個字符串,即使是完整的包名(例如com.example.Settings.User),也可以。我真正需要的是價值觀,所以如果我只能得到這個價值,那還是可以接受的。
這已經得到了我的子對象的名字,但我似乎無法弄清楚如何獲取該是內部的每個瓦爾斯:
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
}
這是非常有效的。謝謝! –
@TravisBrown:我怎樣才能讓它對非最終成員有效? –
@VenkatSudheerReddyAedama可能值得一個新的問題 - 如果你發佈一個,我可以嘗試今晚看看。 –