/ / तारों का उपयोग बिना हार्डकोडिंग के प्रकार के रूप में कैसे करें? - स्कैला, प्रकार, मैक्रोज़

बिना हार्डकोडिंग के प्रकार के रूप में तारों का उपयोग कैसे करें? - स्कैला, प्रकार, मैक्रोज़

मेरे पास जेसन स्ट्रिंग को ऑब्जेक्ट्स में कनवर्ट करने के लिए कुछ कोड है:

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

आप देख सकते हैं कि मैंने कुछ तारों को हार्डकोड किया है और ऑब्जेक्ट्स में कनवर्ट करने के लिए उन्हें प्रकार के रूप में उपयोग किया है।

क्या उन्हें बिना हार्डकोड के ऐसा करने का कोई तरीका है? मुझे यकीन नहीं है कि यह मैक्रो के साथ भी संभव है।

उत्तर:

जवाब के लिए 0 № 1

आप वर्ग का नाम इस्तेमाल कर सकते हैं:

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