在java对象上调用setX方法将map转换为java对象?

时间:2016-01-14 07:13:50

标签: clojure

我正在尝试将JSON文件转换为thrift二进制格式以节省存储和网络带宽。这与我的问题无关。但想要描述它的背景。

所以说,我有来自json的map和Java类Event

(def m 
 {"a" 1 
  "b" 2})

java class

package my-test;

class Event {
   public String a;
   public String b;
   public void setA(String a) { this.a = a; }
   public void setB(String b) { this.b = b; }
}

如何获取值为Event的{​​{1}}对象?

P.S。

尝试使用https://groups.google.com/forum/#!topic/clojure/YJNRnGXLr2I

中提到的m
call-method*

(defn call-method* [obj m & args] (eval `(. ~obj ~(symbol m) ~@args))) 提出来了。我不知道为什么。

Can't embed object in code, maybe print-dup not defined

P.S。

此问题Dynamic method calls in a Clojure macro?更适合阅读。

1 个答案:

答案 0 :(得分:1)

clojure.java.data/to-java工作。

(import 'mytest.Event)
(use 'clojure.java.data)
(def m {"a" "1"})
(println (bean (to-java Event m)))