API for clojure.reflect - Clojure v1.12.1 (stable)

by Stuart Halloway

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



ClassResolver

Protocol

    Known implementations: clojure.lang.Fn, java.lang.ClassLoader
    

resolve-class

function
Usage: (resolve-class this name)
Given a class name, return that typeref's class bytes as an InputStream.

      
      
      
    
Source


Reflector

Protocol
Protocol for reflection implementers.
Known implementations: AsmReflector, JavaReflector

do-reflect

function
Usage: (do-reflect reflector typeref)

      

      
      
      
    
Source


TypeReference

Protocol
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

typename

function
Usage: (typename o)
Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]

      
      
      
    
Source

Types



AsmReflector

type

    Fields: [class-resolver]
Protocols: Reflector
Interfaces:


Constructor

record

    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


Field

record

    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


JavaReflector

type

    Fields: [classloader]
Protocols: Reflector
Interfaces:


Method

record

    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



->AsmReflector

function
Usage: (->AsmReflector class-resolver)
Positional factory function for class clojure.reflect.AsmReflector.

    
    
    Source
  


->Constructor

function
Usage: (->Constructor name declaring-class parameter-types exception-types flags)
Positional factory function for class clojure.reflect.Constructor.

    
    
    Source
  


->Field

function
Usage: (->Field name type declaring-class flags)
Positional factory function for class clojure.reflect.Field.

    
    
    Source
  


->JavaReflector

function
Usage: (->JavaReflector classloader)
Positional factory function for class clojure.reflect.JavaReflector.

    
    
    Source
  


->Method

function
Usage: (->Method name return-type declaring-class parameter-types exception-types flags)
Positional factory function for class clojure.reflect.Method.

    
    
    Source
  


flag-descriptors

var

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

    
    
    Source
  


map->Constructor

function
Usage: (map->Constructor m#)
Factory function for class clojure.reflect.Constructor, taking a map of keywords to field values.

    
    
    Source
  


map->Field

function
Usage: (map->Field m#)
Factory function for class clojure.reflect.Field, taking a map of keywords to field values.

    
    
    Source
  


map->Method

function
Usage: (map->Method m#)
Factory function for class clojure.reflect.Method, taking a map of keywords to field values.

    
    
    Source
  


reflect

function
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
Source


type-reflect

function
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
Logo & site design by Tom Hickey.
Clojure auto-documentation system by Tom Faulhaber.
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy