如何使用typesafe从配置文件中的值中删除数据类型?

时间:2018-11-22 07:23:55

标签: scala typesafe typesafe-config

我有一个配置文件beam-template.conf,该文件具有不同的属性,例如

   `beam.agentsim.agents.rideHail.keepMaxTopNScores = "int | 1"
    beam.agentsim.agents.rideHail.minScoreThresholdForRepositioning = "double | 0.1"`

我正在尝试获取这样的属性值。

  Configfactory.parseFile(new File(path/beam-template.conf)).entrySet().asScala.foreach { entry =>
    if (!(userConf.hasPathOrNull(entry.getKey))) {
      logString+="\nKey= " + entry.getKey + " ,Value= " + entry.getValue.render
    }
}

所以问题在于值还包括它们的数据类型,例如

value = int | 1
value = double | 0.1

我只需要像value = 1value = 0.1这样的实际值,而不需要包含它们的数据类型。因此,请提出一些解决方案,以便我可以从其值中删除数据类型

1 个答案:

答案 0 :(得分:1)

我假设类型为'int | 1'是字符串。

然后您可以使用:

def toValue[A](value: String): A = {
  val valStr = value.split("\\|").last.trim()
  (value.split("\\|").head.trim() match {
    case "double" => valStr.toDouble
    case "int" => valStr.toInt
    case other => valStr
  }).asInstanceOf[A]
}
println(toValue[Int]("int | 1"))
println(toValue[Double]("double | 1.1"))
println(toValue[String]("hello"))

我将其更新为常规功能。我还看到|必须转义。