Ben, It's a good idea, but it's going to bite you:
- what if the class in question has fields or package-private methods that are touched by Java code? - what if the class take ctor arguments? - what if the ctor has side effects? - Chas On Nov 16, 2011, at 11:28 AM, Ben Mabey wrote: > Hi, > I would like to be able to add metadata to arbitrary java objects that have > already been instantiated. I know that you can use proxy to add metadata to > objects that you create but in my case the object already exists (i.e. it is > returned from another method call outside of my control). > > It seems like the best solution would be to create a delegate class/object > that wraps the original one. Being able to write something like this would > be ideal: > > (defn wrap-with-meta > ([obj] > (wrap-with-meta obj nil)) > ([obj meta] > (delegate obj > clojure.lang.IObj > (withMeta [this new-meta] (wrap-with-meta obj > > > new-meta)) > (meta [this] meta)))) > > The delegate function would operate very similar to proxy, but instead of > taking a class it takes an object. A class would be created that extends the > object's class, just like a class is generated for proxy. However, instead of > stubs being generated that call super the stubs would delegate to the given > object. (Also note, I am also using reify-like syntax since I prefer that to > the syntax in proxy.) > > I'm curious to hear people's thoughts on this approach. I'd also be really > interested to see how other people have addressed this in the past (I doubt > I'm the first one to run into this). > > I know that clojure mentality is to avoid wrappers, but I don't see this as > being much different than what proxy already does. Of course, I may be > missing something... if so, please enlighten me. :) > > Thanks, > Ben > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en