java - 通过 Clojure 打印机和阅读器往返 Java 类

标签 java serialization printing clojure barcode-scanner

我有一个 Java 类 Vector2,我想说服它与 Clojure 读者“玩得开心”。

(def a (vec2 1 2))
(print-str a)
=> "#<Vector2 [1 2]>"

理想情况下,我希望类以 Clojure 读者可以阅读的形式打印出来。即我希望以下内容返回 true:

(= a (read-string (print-str a)))

实现这种往返能力的最佳方式是什么?

最佳答案

您需要为您的类/类型提供print-dupprint-method 多方法。

查看 core.clj

例如:

(import 'java.util.Hashtable)
(defmethod print-method Hashtable [x writer] 
      (binding [*out* writer] 
         (print (let [h  (gensym)] 
                 `(let [~h (Hashtable.)] 
                     ~@(map (fn [i] 
                               `(.put ~h ~(str "\"" (.getKey i) "\"") ~(.getValue i)  ) ) x) ~h)))  ))
(def a (Hashtable.))
(.put a "a" 1)
(.put a "b" 2)
(= a (eval (read-string (print-str a))))

关于java - 通过 Clojure 打印机和阅读器往返 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15022512/

相关文章:

HTML、CSS - 长表的换行符需要修复

java pdfbox printerjob错误的缩放/页面格式

java - 按列的内容对矩阵或二维数组进行排序

java - 在 main 上序列化泛型类型

java - 使用自定义表单的序列化代理?

python - 每个请求方法在 drf 序列化程序中进行不同的验证

javascript - JS : datatables printing and exporting excel

java - Swing JProgressBar 下面有多个 JLabels

java - JAVA 字节消耗的全局与局部(变量和列表)

java - 如何解决 Java.lang.NullPointerException : Attempt to invoke virtual method?