我有一个非常普通的消息对象,我得到一个队列就像回到:如何创建自己的自定义转换
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