6

したがって、clojure.core/beanは私が望むものにかなり近いと思いますが、ネストされた Bean を持つ Java アプリケーションを使用しているため、最終的に次のようなマップになります。

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

beanJava オブジェクトを再帰的に呼び出して、架空のBarOwnerオブジェクトをマップとしても発行できるようにするにはどうすればよいですか。

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

編集 1

私はそれを発見しclojure/java.datafrom-javaおそらく よりもこの種のものに適していbeanます。

4

2 に答える 2

4

「bean を再帰的に使用する方法」に対する理想的な答えではないかもしれませんが、Clojure コミュニティのサイトでより豊富な contrib ライブラリを使用することで解決しました。具体的には

clojure/java.data

単純な再帰的な Bean 解決を提供し、特に毛深いケースで Java 型を処理するように構成できます。を使用したい他の人にはこれをお勧めしますbean

于 2012-10-17T18:24:17.533 に答える
0

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))
于 2012-09-29T00:02:22.837 に答える