【问题标题】:Does :gen-class is the only way to extend Java class in Clojure?:gen-class 是在 Clojure 中扩展 Java 类的唯一方法吗?
【发布时间】:2014-08-11 18:05:03
【问题描述】:

我有一个不可序列化的第三方 Java 类 A,我想让它可序列化以通过网络发送。想法是制作扩展 A 并实现 Serializable 的新类型 SerializableA。然后我想写这样的东西:

(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 类?

【问题讨论】:

  • 您可能想看看Nippy,这是一个看起来非常灵活并支持自定义类型的 Clojure 序列化库。我不确定这是否会扩展到不可序列化的 Java 类,但它可能值得一看。

标签: java serialization clojure


【解决方案1】:

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

Leiningen 使在您的项目中添加 Java 和 Clojure 源代码变得非常容易,并且会先编译 Java,然后将这些类提供给您的 Clojure 源代码。

【讨论】:

    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    相关资源
    最近更新 更多