Skip to content

clojure.core/proxy

View this page on ClojureDocs

Type: macro Added: Clojure 1.0 Examples: 5 Runnable: 1
([class-and-interfaces args & fs])

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

by Kototama on
by TimMc on . May have evaluation errors.
by craigandera on . May have evaluation errors.
by gluer on . May have evaluation errors.
by audriu on . May have evaluation errors.

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.