我有一个不可序列化的第三方Java类A
,我想让它可序列化以通过网络发送。想法是使新类型SerializableA扩展A并实现Serializable。然后我想写这样的东西:
(writeObject [this out]
(.writeObject out {:ff (. this 'ff) :gg (. this 'gg)}))
(readObject [this in]
(let [{ff :ff gg :gg} (.readObject in)]
(set! (. this 'ff) ff)
(set! (. this 'gg) gg)))
我说得对,只能用:gen-class在单独的文件中?或者是否有任何其他更智能的解决方案,例如扩展Serializable接口并将Serializable属性附加到A类?
答案 0 :(得分:4)
因为这些是“特殊方法”(不是实际的Serializable接口的一部分),并且因为在Clojure中故意不提供具体的继承,所以最简单的路径可能就是用Java编写它。
Leiningen可以很容易地在你的项目中添加Java和Clojure源代码,并且首先编译Java,然后将这些类提供给你的Clojure源代码。