ClojureDocs

Namespaces

clojure.reflect

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.
Vars in clojure.reflect

*^%

->AsmReflector
Positional factory function for class clojure.reflect.AsmReflector.
->Constructor
Positional factory function for class clojure.reflect.Constructor.
->Field
Positional factory function for class clojure.reflect.Field.
->JavaReflector
Positional factory function for class clojure.reflect.JavaReflector.
->Method
Positional factory function for class clojure.reflect.Method.

d

f

flag-descriptors
The Java access bitflags, along with their friendly names and the kinds of objects to which they can apply.

m

map->Constructor
Factory function for class clojure.reflect.Constructor, taking a map of keywords to field values.
map->Field
Factory function for class clojure.reflect.Field, taking a map of keywords to field values.
map->Method
Factory function for class clojure.reflect.Method, taking a map of keywords to field values.

r

reflect
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.
Reflector
Protocol for reflection implementers.
resolve-class
Given a class name, return that typeref's class bytes as an InputStream.

t

type-reflect
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.
typename
Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]
TypeReference
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.