1

我有一个 conf/application.conf 设置,例如

mongodb.replicaSetSeeds = ["bobk-mbp.local:27017","bobk-mbp.local:27018"]

我在我的代码中把它拉出来(实际提取有点不同,但这是它的要点)

val replicaSetSeeds = Play.current.configuration.getStringList("mongodb.replicaSetSeeds")
val listOfString: List[String] = replicaSetSeeds.getOrElse(List("localhost"))

但是编译器讨厌我

type mismatch;  found   : Object  required: List[String]

getStringList 的签名是

def getStringList(path: String): Option[java.util.List[String]]

我该如何处理这里的 None 情况,还是我的问题 List[String] 与 List[java.util.String] 不同?

4

2 回答 2

6

试一试:

import collection.JavaConversions._
val optList:Option[List[String]] = Play.current.configuration.getStringList("mongodb.replicaSetSeeds").map(_.toList)
val list = optList.getOrElse(List("localhost"))

这里发生了很多事情。首先,您需要导入JavaConversions隐式,因为返回的是 anOption[java.util.List[String]]而我们希望它是一个 scala List。通过执行map(_.toList),我强制隐式转换启动并让我得到一个Option[List[String]]并且从那里事情非常简单。

于 2013-06-21T00:50:26.523 回答
0

在 play 2.5 中,您需要使用依赖注入,以下对我来说效果很好:

1)在你的课堂上注入Configuration

class Application @Inject()(
  configuration: play.api.Configuration
) ...

2)在你的方法

import scala.collection.JavaConversions._
val optlist = configuration.getStringList("mongodb.replicaSetSeeds").map{_.toList}
val list = optList.getOrElse(List("localhost"))
于 2016-07-21T10:42:57.913 回答