我有一個非常普通的消息對象,我得到一個隊列就像回到:如何創建自己的自定義轉換
case class Message(key: String, properties: Map[String, String])
然後我有一堆代表的消息非常具體的類,我使用properties.get(「類型」),以確定它是特定消息:
sealed trait BaseMessage
case class LoginMessage(userId: Int, ....) extends BaseMessage
case class RegisterMessage(email: String, firstName: String, ....) extends BaseMessage
現在在我的代碼,我不得不從通用消息轉換爲在許多地方一個特定的消息,我想創建此在一個地方如:
目前,我做這樣的事情:
val m = Message(....)
val myMessage = m.properties.get("type") match {
case Some("login") => LoginMessage(m.properties("userID"), ...)
case ...
}
我必須在作出這一階不太麻煩什麼選擇?
不使用'Map [String,String]'來存儲初學者的任意屬性。恢復這些信息並不容易。 –
無形可能可以幫助,如果你想保持類型安全 – LMeyer
@MichaelZajac該類是從消息隊列系統,不能改變。 – Blankman