clojure.core/proxy¶
class-and-interfaces - a vector of class names
args - a (possibly empty) vector of arguments to the superclass constructor.
f => (name [params*] body) or (name ([params*] body) ([params+] body) ...)
Expands to code which creates a instance of a proxy class that implements the named class/interface(s) by calling the supplied fns. A single class, if provided, must be first. If not provided it defaults to Object.
The interfaces names must be valid interface types. If a method fn is not provided for a class method, the superclass method will be called. If a method fn is not provided for an interface method, an UnsupportedOperationException will be thrown should it be called. Method fns are closures and can capture the environment in which proxy is called. Each method fn takes an additional implicit first arg, which is bound to 'this. Note that while method fns can be provided to override protected methods, they have no other access to protected members, nor to super, as these capabilities cannot be proxied.
Examples¶
Note by p-himik¶
Note that the proxied methods are set up only after the constructor is called, so if you want to override anything that the constructor of the superclass calls, proxy is not the right thing to do it.
See also¶
Content from the matching ClojureDocs page, with authors credited on each contribution.