是否有可能進一步限定序列化綁定? 運行時類型看起來太有限了。Akka序列化綁定太有限了?
例如我有
我現在無法序列ToDo[MyPayload]
用不同的串行比ToDo[OtherPayload]
(甚至在不同的演員!),因爲其運行時類的名字是相同的(PersistentExecutorProtocol$ToDo
)。
我錯過了什麼嗎? - 引入AProtocolClass
或使PersistentExecutorProtocol
和abstract class
沒有幫助。
是否有可能進一步限定序列化綁定? 運行時類型看起來太有限了。Akka序列化綁定太有限了?
例如我有
我現在無法序列ToDo[MyPayload]
用不同的串行比ToDo[OtherPayload]
(甚至在不同的演員!),因爲其運行時類的名字是相同的(PersistentExecutorProtocol$ToDo
)。
我錯過了什麼嗎? - 引入AProtocolClass
或使PersistentExecutorProtocol
和abstract class
沒有幫助。
這不是特定的Akka,但是是由於Scala中的概念(路徑依賴類型)沒有將1:1與JVM可以執行的操作相對應。 Scala編譯器需要以JVM可以理解的方式對這些概念進行編碼,這會導致信息丟失(就像使用類型擦除一樣)。
選擇基於對象的序列化程序發生在運行時,此時編譯器完成其作業之前可用的信息將丟失,只有JVM特定信息仍可用。
你可能會想出一些解決方法,如ClassTag
s等,但未來悲傷的風險最小的可能是聲明Todo抽象,並在具體協議實例中具有具體的子類型,這將允許您綁定不同的串行器到類型。
你可以在這裏選擇一種方法:https://gist.github.com/johanandren/87fec0b627996a3f850513b81e0a8d66