clojure.reflect
Full namespace name: clojure.reflect
Overview
Reflection on Host Types Alpha - subject to change. Two main entry points: * type-reflect reflects on something that implements TypeReference. * reflect (for REPL use) reflects on the class of an instance, or on a class if passed a class Key features: * Exposes the read side of reflection as pure data. Reflecting on a type returns a map with keys :bases, :flags, and :members. * Canonicalizes class names as Clojure symbols. Types can extend to the TypeReference protocol to indicate that they can be unambiguously resolved as a type name. The canonical format requires one non-Java-ish convention: array brackets are <> instead of [] so they can be part of a Clojure symbol. * Pluggable Reflectors for different implementations. The default JavaReflector is good when you have a class in hand, or use the AsmReflector for "hands off" reflection without forcing classes to load. Platform implementers must: * Create an implementation of Reflector. * Create one or more implementations of TypeReference. * def default-reflector to be an instance that satisfies Reflector.Added in Clojure version 1.3
Protocols
ClassResolverProtocol
Known implementations: clojure.lang.Fn, java.lang.ClassLoaderresolve-classfunction
Usage: (resolve-class this name)
Given a class name, return that typeref's class bytes as an InputStream.Source
ReflectorProtocol
Protocol for reflection implementers.Known implementations: AsmReflector, JavaReflector
do-reflectfunction
Usage: (do-reflect reflector typeref)Source
TypeReferenceProtocol
A TypeReference can be unambiguously converted to a type name on the host platform. All typerefs are normalized into symbols. If you need to normalize a typeref yourself, call typesym.Known implementations: clojure.asm.Type, clojure.lang.Symbol, java.lang.Class
typenamefunction
Usage: (typename o)
Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]Source
Types
AsmReflectortype
Fields: [class-resolver]Protocols: Reflector
Interfaces:
Constructorrecord
Fields: [name declaring-class parameter-types exception-types flags]Protocols:
Interfaces: clojure.lang.IHashEq, clojure.lang.IKeywordLookup, clojure.lang.ILookup, clojure.lang.IObj, clojure.lang.IPersistentMap, java.io.Serializable, java.util.Map
Fieldrecord
Fields: [name type declaring-class flags]Protocols:
Interfaces: clojure.lang.IHashEq, clojure.lang.IKeywordLookup, clojure.lang.ILookup, clojure.lang.IObj, clojure.lang.IPersistentMap, java.io.Serializable, java.util.Map
JavaReflectortype
Fields: [classloader]Protocols: Reflector
Interfaces:
Methodrecord
Fields: [name return-type declaring-class parameter-types exception-types flags]Protocols:
Interfaces: clojure.lang.IHashEq, clojure.lang.IKeywordLookup, clojure.lang.ILookup, clojure.lang.IObj, clojure.lang.IPersistentMap, java.io.Serializable, java.util.Map
Public Variables and Functions
->AsmReflectorfunction
Usage: (->AsmReflector class-resolver)
Positional factory function for class clojure.reflect.AsmReflector.Source
->Constructorfunction
Usage: (->Constructor name declaring-class parameter-types exception-types flags)
Positional factory function for class clojure.reflect.Constructor.Source
->Fieldfunction
Usage: (->Field name type declaring-class flags)
Positional factory function for class clojure.reflect.Field.Source
->JavaReflectorfunction
Usage: (->JavaReflector classloader)
Positional factory function for class clojure.reflect.JavaReflector.Source
->Methodfunction
Usage: (->Method name return-type declaring-class parameter-types exception-types flags)
Positional factory function for class clojure.reflect.Method.Source
flag-descriptorsvar
The Java access bitflags, along with their friendly names and the kinds of objects to which they can apply.Source
map->Constructorfunction
Usage: (map->Constructor m#)
Factory function for class clojure.reflect.Constructor, taking a map of keywords to field values.Source
map->Fieldfunction
Usage: (map->Field m#)
Factory function for class clojure.reflect.Field, taking a map of keywords to field values.Source
map->Methodfunction
Usage: (map->Method m#)
Factory function for class clojure.reflect.Method, taking a map of keywords to field values.Source
reflectfunction
Usage: (reflect obj & options)
Alpha - subject to change. Reflect on the type of obj (or obj itself if obj is a class). Return value and options are the same as for type-reflect.
Added in Clojure version 1.3
Sourcetype-reflectfunction
Usage: (type-reflect typeref & options)
Alpha - subject to change. Reflect on a typeref, returning a map with :bases, :flags, and :members. In the discussion below, names are always Clojure symbols. :bases a set of names of the type's bases :flags a set of keywords naming the boolean attributes of the type. :members a set of the type's members. Each member is a map and can be a constructor, method, or field. Keys common to all members: :name name of the type :declaring-class name of the declarer :flags keyword naming boolean attributes of the member Keys specific to constructors: :parameter-types vector of parameter type names :exception-types vector of exception type names Key specific to methods: :parameter-types vector of parameter type names :exception-types vector of exception type names :return-type return type name Keys specific to fields: :type type name Options: :ancestors in addition to the keys described above, also include an :ancestors key with the entire set of ancestors, and add all ancestor members to :members. :reflector implementation to use. Defaults to JavaReflector, AsmReflector is also an option.
Added in Clojure version 1.3
Source
© Rich Hickey
Licensed under the Eclipse Public License 1.0.
https://clojure.github.io/clojure/branch-clojure-1.8.0/clojure.reflect-api.html