(update-proxy proxy mappings)
Takes a proxy instance and a map of strings (which must correspond to methods of the proxy superclass/superinterfaces) to fns (which must take arguments matching the corresponding method, plus an additional (explicit) first arg corresponding to this, and updates (via assoc) the proxy's fn map. nil can be passed instead of a fn, in which case the corresponding method will revert to the default behavior. Note that this function can be used to update the behavior of an existing instance without changing its identity. Returns the proxy.
;; from http://groups.google.com/group/clojure/msg/71702435ccd1d189
user> (import java.util.Date)
java.util.Date
user> (def d (proxy [Date] [] (toString [] "hello")))
#'user/d
user> d
#<Date$0 hello>
user> (.toString d)
"hello"
user> (.toGMTString d)
"17 Nov 2010 12:57:28 GMT"
user> (update-proxy d {"toGMTString" (fn [this] "goodbye")})
nil
user> (.toGMTString d)
"goodbye"