/ / Ako používať reťazce ako typ bez ich hardcoding? - scala, typy, makrá

Ako používať reťazce ako typ bez ich hardcoding? - scala, typy, makrá

Mám nejaký kód na konverziu json reťazca na objekty, ako napríklad:

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)
???
}
}

Môžete vidieť, že som hardcoded niektoré reťazce a použiť ich ako typy previesť na objekty.

Existuje nejaký spôsob, ako urobiť to isté bez ich hardcode? Nie som si istý, či je to možné, dokonca aj s makro.

odpovede:

0 pre odpoveď č. 1

Môžete použiť názov triedy:

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