Ich habe etwas Code, um JSON-String in Objekte wie folgt zu konvertieren:
def apply(line: String): PairEvent = {
val (name, json) = line.span(_ != " ")
name match {
case "OpenTabEvent" => Serialization.read[OpenTabEvent](json)
case "CloseTabEvent" => Serialization.read[CloseTabEvent](json)
case "ChangeContentEvent" => Serialization.read[ChangeContentEvent](json)
case "ChangeMasterRequest" => Serialization.read[ChangeMasterRequest](json)
case "CreateFileEvent" => Serialization.read[CreateFileEvent](json)
case "DeleteFileEvent" => Serialization.read[DeleteFileEvent](json)
case "CreateDirEvent" => Serialization.read[CreateDirEvent](json)
case "DeleteDirEvent" => Serialization.read[DeleteDirEvent](json)
case "WatchingFiles" => Serialization.read[WatchingFiles](json)
case _ =>
ServerLogger.info("!!!!!!!!!!!!!!!!!!!!! unknown line from server: " + line)
???
}
}
Sie können sehen, dass ich einige Strings fest codierte und diese als Typen zum Konvertieren in Objekte verwenden.
Gibt es eine Möglichkeit, dasselbe ohne Hardcode zu tun? Ich bin mir nicht sicher, ob es möglich ist, sogar mit Makro.
Antworten:
0 für die Antwort № 1Sie könnten den Klassennamen verwenden:
case OpenTabEvent.getClass.getSimpleName => Serialization.read[OpenTabEvent](json)