Powiedzmy, że mam tę klasęW scala, jak zmienić wartości obiektu w Map [String, String]?
case class Test (id: Long, name: String)
i instancję tej klasy:
Test :
id -> 1
name -> toto
Chciałbym stworzyć mapę [String, String] następujące:
Map("id" -> "1", "name" -> "toto")
Moje pytanie brzmi: czy istnieje sposób na przekształcenie tego wystąpienia testu w mapę [łańcuch, ciąg]? Chcę uniknąć stosowanie metody jak ten:
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
}
Jeśli nie ma sposobu, aby to zrobić w Scala, czy istnieje sposób iteracyjne nad właściwości klasy? Może mogę utworzyć ogólną funkcję, aby to zrobić:
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
}
Czy to możliwe? Jeśli masz dobre przykłady/linki, jestem zainteresowany.
Odpowiedzi na [to pytanie] (http://stackoverflow.com/questions/2224251/reflection-on-a-scala-case-class) mogą pomóc. – incrop
Nie żebym nie lubił ogólnych rozwiązań, ale dla tego problemu użyłbym 'Map (" id "-> t.id.toString," name "-> t.name)' gdzie 't' jest instancją 'Testuj". – sschaef
Dziękujemy za napiwek! – alexgindre