java - 使用 Java 对象作为 Clojure 映射

标签 java clojure clojure-java-interop

我有一个要在 Clojure 中使用的 Java 类。但是,我想将它用作 Clojure map 。这样做需要哪些步骤?

我查看了 IPersistentMap 的代码——Java 类应该实现它吗?还是应该有一些实现协议(protocol)的 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}

关于java - 使用 Java 对象作为 Clojure 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916199/

相关文章:

clojure - 有没有办法在compojure中进行热装?

clojure - leiningen: “lein run”/ “lein uberjar” 上项目中存在的类的 ClassNotFoundException

clojure - 什么是 Clojure 内在函数

clojure - 在 Clojure 中创建 Java 枚举以实现 Java 互操作

java - 如何按现有属性对列表进行排序

java - 在遍历事件处理程序集合时,如何安全地从回调中移除处理程序?

java - 如何在 java 中使用 Apache POI 从 .doc 和 .docx 文件中提取从右到左的文本?

java - 没有 Maven 的 Vaadin Clojure 小部件编译

Clojure gorilla repl 和 JVM 10 异常

java - 如何使用 Hibernate 映射 Java 泛型实例