我有一個應用程序(實際上有幾個)在使用Jackson的Map中解碼JSON數據。數據似乎在Map或ArrayList中(在JSON數組的情況下)。這些流上的數據是非結構化的,所以這不會改變。將Clojure的關聯抽象擴展爲Java庫類型
我擁有一些Clojure代碼,它們訪問這些對象中的嵌套屬性。理想情況下,我想將關聯抽象擴展爲這些Java類型,以便get-in
能夠對它們起作用。類似以下內容:
(extend-protocol clojure.lang.Associative
java.util.Map
(containsKey [this k] (.containsKey this k))
(entryAt [this k] (when (.containsKey this k)
(clojure.lang.MapEntry/create k (.get this k))))
java.util.ArrayList
(containsKey [this k] (< (.size this) k))
(entryAt [this k] (when (.containsKey this k)
(clojure.lang.MapEntry/create k (.get this k)))))
有兩個問題:第一個是Associative不是一個協議(如果它出現這樣會起作用)。第二個是類型已經定義,所以我不能添加與deftype聯合。
我對Clojure的JVM interop部分很新穎。有沒有我沒有看到的方法?還是有一個協議包裝Associative,並將與get-in
,我錯過了?
謝謝!
謝謝薩姆,聽說這個問題沒有一個很好的解決方案是有用的。我非常幸運,因爲它實際上都歸結爲少數呼入站點,並且目前採取了類似的方法。我可能會進一步細化它,並利用RT /獲取您的建議。 謝謝! – Cody