2014-07-23 22 views
0

是否有可能通過Map[String, Any]創建一個對象,其中每對是(StringField - > Value)?使用參數映射構造一個對象scala

例如,

case class Example(a: String, b: Int) 
val obj = new Example(Map('a' -> 'blah', 'b' -> 1)) //? 
val orMaybe = Example(Map('a' -> 'blah', 'b' -> 1) //? 

回答

1

是的,有可能在幾個方面。其中一個將使用反射,另一個(更簡單的)將是使用json作爲中間體。

E.g.與json4s:

import org.json4s._ 
import org.json4s.native.Serialization 
import org.json4s.native.Serialization.{read, write} 

scala> implicit val formats = DefaultFormats 
formats: org.json4s.DefaultFormats.type = [email protected] 

case class Example(a: String, b: Int) 
scala> val obj = read[Example](write(Map("a" -> "blah", "b" -> 1))) 
obj: Example = Example(blah,1) 
scala: val orMaybe = read[Example](write(Map("a" -> "blah", "b" -> 1))) 
orMaybe: Example = Example(blah,1) 
+0

非常ç OOL。謝謝! – joslinm

2

您可以傳遞一個元組作爲參數列表的功能使用.tupled

(Example.apply _).tupled("a" -> 1)

了,並且知道myMap.map通行證地圖的每個元素作爲Tuple ,你可以做到以下幾點:

Map("a" -> 1).map((Example.apply _).tupled).head

相關問題