Поскольку вы используете Scala и предполагаете, что у вас все в порядке с использованием имплицитов, я бы использовал рекомендованный подход с использованием класса обогащения, который позволяет вам сохранить синтаксис Option
.
Пример конфигурации.
existent.sample.string="I exist!"
existent.sample.boolean=true
Пример класса обогащения.
package config
import com.typesafe.config.{Config, ConfigException}
object MyConfig {
implicit class RichConfig(val config: Config) extends AnyVal {
def optionalString(path: String): Option[String] = if (config.hasPath(path)) {
Some(config.getString(path))
} else {
None
}
def optionalBoolean(path: String): Option[Boolean] = if (config.hasPath(path)) {
Some(config.getBoolean(path))
} else {
None
}
// An example of using the exception approach - but less efficient than using hasPath
def optionalString2(key: String): Option[String] = try {
Some(config.getString(key))
} catch {
case _: ConfigException => None
}
}
}
Обратите внимание, что лучше использовать hasPath
(вместо использования Try
), чтобы проверить, существует ли ключ в вашем сценарии, вместо того, чтобы JVM создала исключение, которое не должно представлять интереса для необязательной конфигурации. который может не существовать.
Демо-версия.
import com.typesafe.config._
object ConfigTest extends App {
import MyConfig._
val conf = ConfigFactory.load
val optionalString = conf.optionalString("existent.sample.string")
val optionalStringNone = conf.optionalString("non-existent.sample.string")
println(s"String config value: $optionalString")
println(s"Optional (non-existent) String config value: $optionalStringNone")
val optionalBoolean = conf.optionalBoolean("existent.sample.boolean")
val optionalBooleanNone = conf.optionalBoolean("non-existent.sample.boolean")
println(s"Boolean config value: $optionalBoolean")
println(s"Optional (non-existent) String config value: $optionalBooleanNone")
}
печать.
// String config value: Some(I exist!)
// Optional (non-existent) String config value: None
// Boolean config value: Some(true)
// Optional (non-existent) String config value: None
Документы