簡體   English   中英

如何遞歸使用clojure.core / bean?

[英]How can I use clojure.core/bean recursively?

所以我認為clojure.core / bean非常接近我想要的,但是我正在使用一個嵌套bean的Java應用程序,這樣我最終會得到這樣的地圖:

{:month-total 3835.0 :name "Jan's Meat Diner" :owners #<BarOwner[] [Lcom.fancypants.BarOwner;@1fb332d}

如何,我在Java對象上遞歸調用bean ,以便我可以讓我想象中的BarOwner對象自己作為地圖發出:

{:month-total 3835.0 :name "Jan's Meat Diner" :owners { [:name "Jack"] [:name "Jill"] } }

編輯1

我發現clojure/java.datafrom-java可能比bean更適合這種事情。

雖然它可能不是“如何遞歸使用bean”的理想答案,但在Clojure社區的網站下使用更多更豐富的contrib庫確實解決了它。 特別

Clojure的/ java.data

提供簡單的遞歸bean解析,並且可以配置為在毛茸茸的情況下專門處理java類型。 我向其他想要使用bean人推薦這個。

找出什么是豆而不是什么是非常棘手的。 這似乎可以解決bean中的bean和列表屬性的問題。 可能你會想要更多的類添加到probably-bean? 功能,也許是對地圖屬性的一些支持。

(defn probably-bean? [o]
   (and (not (coll? o))
         ((complement #{Class Long String clojure.lang.Keyword}) (class o))))

(defn transf [o]
    (cond
            (instance? java.util.List o) (into [] (map transf o))
            (probably-bean? o) (into {} (seq (bean o)))
            :else o))

(defn to-bean [o]
    (clojure.walk/prewalk #(transf %) o))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM