Akka序列化结合太有限



是否有可能进一步鉴定序列化结合?运行时类型似乎太有限了。

例如。我有

trait PersistentExecutorProtocol[Payload] extends Serializable {
  sealed trait Event extends Serializable
  case class ToDo(value: Payload) extends Event
  case class Done(value: Long) extends Event
}
object AProtocolInstance extends PersistentExecutorProtocol[MyPayload]
object BProtocolInstance extends PersistentExecutorProtocol[OtherPayload]

我现在无法使用与ToDo[OtherPayload]不同的序列化序列化ToDo[MyPayload](甚至在不同的演员中!(,因为它们的运行时类名称相等(PersistentExecutorProtocol$ToDo(。

我想念什么吗? - 介绍AProtocolClass或制作PersistentExecutorProtocol abstract class无济于事。

这不是特定的AKKA,而是Scala(路径依赖类型(中的概念如何与JVM可以做什么的结果。Scala编译器需要以JVM可以理解的方式编码此类概念,这可能会导致信息丢失(例如,删除类型(。

选择基于对象的序列化器发生在运行时发生,到那时,编译器完成作业之前可用的信息丢失了,并且只有JVM特定信息仍然可用。

您可能可以使用ClassTag S等来解决此问题。但是,将来悲伤的最小风险可能是声明Todo抽象,并在具体协议实例中具有混凝土子类型,这将使您可以将不同的串行器绑定到不同类型。

您可以在此处执行一种方法:https://gist.github.com/johanandren/87fec0b627996a3f850513b81e0a8d66

相关内容

  • 没有找到相关文章

最新更新