我有一个
Java类,我想在Clojure中使用.但是,我想用它作为Clojure地图.这样做需要什么步骤?
我看过IPersistentMap的代码 – Java类是否实现了这一点?还是应该有一些Clojure代码实现一个协议?
我知道我可以写一些映射代码,以将代码从Java对象显式转换为地图,但该解决方案具有很高的努力/回报率.此外,我可能会再次遇到同样的情况.
具体示例:我有一个用Java编写的解析器.我想使用它来解析一些文本,然后访问解析的数据结构的内容,就好像它在Clojure地图中一样:
(def parser (new MyParser)) (let [parse-tree (parser ... parse some text ...)] ((parse-tree :items) "itemid"))
解决方法
功能
bean
想到了:
Takes a Java object and returns a read-only implementation of the map abstraction based upon its JavaBean properties.
从网站获取的示例:
user=> (import java.util.Date) java.util.Date user=> (def *now* (Date.)) #'user/*now* user=> (bean *now*) {:seconds 57,:date 13,:class java.util.Date,:minutes 55,:hours 17,:year 110,:timezoneOffset -330,:month 6,:day 2,:time 1279023957492}