Digamos que tengo esta claseEn scala, ¿cómo convertir los valores del objeto en Map [String, String]?
case class Test (id: Long, name: String)
y una instancia de esta clase:
Test :
id -> 1
name -> toto
me gustaría crear un mapa [String, String] de la siguiente manera:
Map("id" -> "1", "name" -> "toto")
Mi pregunta es: ¿hay alguna manera de convertir esta instancia de Prueba en Mapa [Cadena, Cadena]? Quiero evitar utilizar un método como éste:
def createMap(instance: Test): Map[String, String] = {
val map = new Map[String, String]
map.put("id", instance.id.toString)
map.put("name", instance.name)
map
}
Si no existe un método para hacerlo en Scala, hay una manera de iterar sobre las propiedades de clase? Tal vez puedo crear una función genérica para hacerlo:
def createMap(instance: T): Map[String, String] = {
val map = new Map[String, String]
//pseudocode
for ((name, value) <- instance.getClassProperties.getValues) {
case value.isInstanceOf[String] : map.push(name, value)
case _ : map.push(name, value.toString)
}
map
}
¿Es esto posible? Si tiene buenos ejemplos/enlaces, estoy interesado.
Las respuestas a [esta pregunta] (http://stackoverflow.com/questions/2224251/reflection-on-a-scala-case-class) pueden ayudar. – incrop
No es que no me gusten las soluciones genéricas, pero para este problema usaría 'Map (" id "-> t.id.toString," name "-> t.name)' donde 't' es una instancia de 'Prueba'. – sschaef
¡Gracias por el consejo! – alexgindre