/ / Wie kann man Strings als Typ verwenden, ohne sie hart zu codieren? - Scala, Typen, Makros

Wie kann man Strings als Typ verwenden, ohne sie hart zu codieren? - Scala, Typen, Makros

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 № 1

Sie könnten den Klassennamen verwenden:

case OpenTabEvent.getClass.getSimpleName => Serialization.read[OpenTabEvent](json)