Config
あるオブジェクトを解決したい、たとえばconfig1
、他のオブジェクトで解決したいconfig2
.
この種のものを許可する唯一のパブリック API はconfig1.withFallback(config2).resolve()
. ただし、これによりエントリが追加されますがconfig2
、config1
これは必要なものではありません。
ResolveContext
いくつかの調査で、そのためのメソッドを提供するという名前の非公開クラスが見つかりました。そのため、リフレクションを使用してそれを利用しています。現在のコード:
object ConfigImplicits {
implicit class RichConfig(val config: Config) extends AnyVal {
def resolveWith(source: Config): Config = {
val resolver = resolveContext.getDeclaredMethod(
"resolve",
abstractConfigValue,
abstractConfigObject,
configResolveOptions
)
resolver.setAccessible(true)
resolver.invoke(
null,
config.underlyingAbstractConfigObject,
source.underlyingAbstractConfigObject,
ConfigResolveOptions.defaults
).asInstanceOf[ConfigObject].toConfig
}
def underlyingAbstractConfigObject = {
val f = simpleConfig.getDeclaredField("object")
f.setAccessible(true)
f.get(config)
}
}
val resolveContext = Class forName "com.typesafe.config.impl.ResolveContext"
val abstractConfigValue = Class forName "com.typesafe.config.impl.AbstractConfigValue"
val abstractConfigObject = Class forName "com.typesafe.config.impl.AbstractConfigObject"
val configResolveOptions = classOf[ConfigResolveOptions]
val simpleConfig = Class forName "com.typesafe.config.impl.SimpleConfig"
}
非公開の内部に依存することは良い考えではないかもしれないことを認識しています. そう:
- どういうわけか見逃したが、すでにこれを行っているパブリックメソッドはありますか?
- そうでない場合は、プル リクエストを作成しますか?