JacksonによるJSONデータのデコードを行うアプリケーションがいくつかあります(実際にはいくつかあります)。データはMapまたはArrayList(JSON配列の場合)のいずれかに表示されます。これらのストリームに含まれるデータは構造化されていないため、変更されません。ClojureのAssociative AbstractionをJavaライブラリタイプに拡張する
私はこれらのオブジェクトのネストされたプロパティにアクセスするClojureコードを所有しています。理想的には、Associative抽象化をこれらの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)))))
これには2つの問題があります。最初にアソシエイティブはプロトコルではありません(もしそうなら、それはうまくいくでしょう)。もう一つは、タイプが既に定義されているため、私はdeftypeをAssociativeに追加できません。
私はClojureのJVM interopの部分でかなり新しくなっています。私が見ていない方法はありますか?または、Associativeをラップし、私が逃したget-in
と動作するプロトコルがありますか?
ありがとうございます!
サムに感謝、本当にこの問題の良い解決法はないと聞くと便利です。私は非常に幸運なことに、実際にはすべてゲットインのための少数のコールサイトに沸き立っており、現在同様のアプローチをとっています。私はおそらくそれをさらにスリムにし、RTを利用する/あなたの提案を得る。 ありがとう! – Cody