Scala 如何在不硬编码的情况下使用字符串作为类型?

Scala 如何在不硬编码的情况下使用字符串作为类型?,scala,types,macros,Scala,Types,Macros,我有一些代码可以将json字符串转换为如下对象: def apply(line: String): PairEvent = { val (name, json) = line.span(_ != ' ') name match { case "OpenTabEvent" => Serialization.read[OpenTabEvent](json) case "CloseTabEvent" => Serialization.read[Clo

我有一些代码可以将json字符串转换为如下对象:

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)
        ???
    }
  }
您可以看到我硬编码了一些字符串,并使用它们作为类型转换为对象


有没有办法不用硬编码就可以做到这一点?我不确定这是否可能,即使使用宏。

您可以使用类名:

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