是:gen-class是在Clojure中扩展Java类的唯一方法吗?

时间:2014-08-08 11:52:48

标签: java serialization clojure

我有一个不可序列化的第三方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类?

1 个答案:

答案 0 :(得分:4)

因为这些是“特殊方法”(不是实际的Serializable接口的一部分),并且因为在Clojure中故意不提供具体的继承,所以最简单的路径可能就是用Java编写它。

Leiningen可以很容易地在你的项目中添加Java和Clojure源代码,并且首先编译Java,然后将这些类提供给你的Clojure源代码。