Serialization 如何在Clojure中按gen类生成可序列化的java类?

Serialization 如何在Clojure中按gen类生成可序列化的java类?,serialization,clojure,clojure-java-interop,gen-class,Serialization,Clojure,Clojure Java Interop,Gen Class,我们需要通过Java序列化机制将Clojure生成的一组Java对象序列化到一个文件中 (gen-class :name lancelot.Instance :extends cc.mallet.types.Instance) (gen-class :name lancelot.FilterPipe :extends cc.mallet.pipe.Pipe :prefix "-filter-" :methods [[pipe [cc.mallet.types.Instance] l

我们需要通过Java序列化机制将Clojure生成的一组Java对象序列化到一个文件中

(gen-class
 :name lancelot.Instance
 :extends cc.mallet.types.Instance)

(gen-class
 :name lancelot.FilterPipe
 :extends cc.mallet.pipe.Pipe
 :prefix "-filter-"
 :methods [[pipe [cc.mallet.types.Instance] lancelot.Instance]])

(defn -filter-pipe [this ^cc.mallet.types.Instance inst]
  (.setData inst (clojure.string/join " "
    (filter normal-word? (clojure.string/split (.getData inst) #"\s+"))))
  inst)

(gen-class
 :name lancelot.SegmentorPipe
 :extends cc.mallet.pipe.Pipe
 :prefix "-segmentor-"
 :methods [[pipe [cc.mallet.types.Instance] lancelot.Instance]])

(defn -segmentor-pipe [this ^cc.mallet.types.Instance inst]
  (.setData inst (seg/seg (.getData inst)))
  inst)
如上所述,需要序列化lancelot.FilterPipe和lancelot.SegmentorPipe的实例。我们发现编写对象流是可以的,但在重新编译代码后读取对象流是不起作用的

线程“thread-8”java.io.InvalidClassException中的异常: 兰斯洛特;分段管;本地类不兼容:流classdesc serialVersionUID=258385214587230781,本地类serialVersionUID= -2255006751011717591位于java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)的 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514) 在 java.io.ObjectInputStream.ReadOrderinaryObject(ObjectInputStream.java:1750) 位于java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 位于java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)

因为serialVersionUID是静态的和最终的,但gen类似乎只能生成实例级的最终字段。因此,问题是我无法为生成的类设置特定的serialVersionUID


对这个问题有什么建议吗?提前感谢。

请尝试添加可序列化

(gen类
:name lancelot.Instance
:实现[java.io.Serializable]

:扩展cc.mallet.types.Instance)

谢谢。因为serialVersionUID是静态的和最终的,但gen类似乎只能生成实例级的最终字段。这就是原因!看见