ScalaStyle不允许使用可变变量。示例代码:
object Configuration {
var auroaDbConfig: AuroraConnectionParameter = null
def getConfigration() = {
val rootConfig: Config = ConfigFactory.load()
//for aurora configuration
auroaDbConfig = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
//for spark configuration
val sparkConfig: SparkConnectionParameter = rootConfig
.as[SparkConnectionParameter]("mdpApp.spark")
//for cassandra configuration
val cassandraDbConfig: CassandraConnectionParameter = rootConfig
.as[CassandraConnectionParameter]("mdpApp.cassandra")
//for s3 configuration
val s3Config: S3ConnectionParameter = rootConfig
.as[S3ConnectionParameter]("mdpApp.s3")
}
}
用例:ConfigFactory.load()
只能被调用一次
所以将它放入一个函数中,该函数将在代码和代码中被调用一次。根据代码中的要求调用其他变量
如何重构代码,以便在函数中初始化变量并在代码中何时何地调用
答案 0 :(得分:2)
关键字lazy
完全适合这种情况。我们想加载一次,但只在我们需要它时加载。
此示例中没有关键字lazy
也可以。
object Configuration {
lazy val rootConfig: Config = ConfigFactory.load()
lazy val auroaDbConfig: AuroraConnectionParameter = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
lazy val sparkConfig: SparkConnectionParameter = rootConfig
.as[SparkConnectionParameter]("mdpApp.spark")
//for cassandra configuration
lazy val cassandraDbConfig: CassandraConnectionParameter = rootConfig
.as[CassandraConnectionParameter]("mdpApp.cassandra")
//for s3 configuration
lazy val s3Config: S3ConnectionParameter = rootConfig
.as[S3ConnectionParameter]("mdpApp.s3")
}
答案 1 :(得分:0)
def getConfigration() : AuroraConnectionParameter = {
val result = rootConfig
.as[AuroraConnectionParameter]("mdpApp.aurora")
// snip
result
}
val auroaDbConfig = getConfiguration()
如果我理解你的问题,我相信会做你所要求的。当然,您也可以将rootConfig.as[AuroraConnectionParameter]...
作为函数中的最后一个语句执行,它的行为与捕获变量并返回它的行为相同。适合您的风格和其他限制因素。