2017-06-01 133 views
1

是否有可能進一步限定序列化綁定? 運行時類型看起來太有限了。Akka序列化綁定太有限了?

例如我有

我現在無法序列ToDo[MyPayload]用不同的串行比ToDo[OtherPayload](甚至在不同的演員!),因爲其運行時類的名字是相同的(PersistentExecutorProtocol$ToDo)。

我錯過了什麼嗎? - 引入AProtocolClass或使PersistentExecutorProtocolabstract class沒有幫助。

回答

0

這不是特定的Akka,但是是由於Scala中的概念(路徑依賴類型)沒有將1:1與JVM可以執行的操作相對應。 Scala編譯器需要以JVM可以理解的方式對這些概念進行編碼,這會導致信息丟失(就像使用類型擦除一樣)。

選擇基於對象的序列化程序發生在運行時,此時編譯器完成其作業之前可用的信息將丟失,只有JVM特定信息仍可用。

你可能會想出一些解決方法,如ClassTag s等,但未來悲傷的風險最小的可能是聲明Todo抽象,並在具體協議實例中具有具體的子類型,這將允許您綁定不同的串行器到類型。

你可以在這裏選擇一種方法:https://gist.github.com/johanandren/87fec0b627996a3f850513b81e0a8d66