2013-06-20 30 views
1

我有一個的conf/application.conf設置像與Play.current.configuration.getStringList(「mongodb.replicaSetSeeds」)選項處理掙扎

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]] 

我怎麼在這裏辦理無的情況下還是我的問題列表[字符串]是不一樣的列表[java.util.String]?

回答

6

這給一個鏡頭:

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

有很多種東西怎麼回事。首先,您需要導入JavaConversions含義,因爲返回的內容是Option[java.util.List[String]],而我們希望這是一個縮寫List。通過執行map(_.toList),我強制隱式轉換踢入並給我一個Option[List[String]],從那裏看起來非常簡單。

+1

親愛的讀者,是一個很好的答案。它也可以工作。 –

0

在玩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"))