首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

clojure.reflect

完整的命名空间名称:clojure.reflect

概述

代码语言:javascript
复制
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.

在Clojure版本1.3中添加

协议

ClassResolver协议

已知实现:clojure.lang.Fn,java.lang.ClassLoader

解析类函数

代码语言:javascript
复制
Usage: (resolve-class this name)
代码语言:javascript
复制
Given a class name, return that typeref's class bytes as an InputStream.

反射协议

代码语言:javascript
复制
Protocol for reflection implementers.

已知实现:AsmReflector,,,JavaReflector

DO反射函数

代码语言:javascript
复制
Usage: (do-reflect reflector typeref)

类型参考协议

代码语言:javascript
复制
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.

已知实现:clojure.asm.Type,clojure.lang.Symbol,java.lang.Class

类型函数

代码语言:javascript
复制
Usage: (typename o)
代码语言:javascript
复制
Returns Java name as returned by ASM getClassName, e.g. byte[], java.lang.String[]

类型

AsmReflectortype

字段:类解析器

议定书:反射器

接口:

建筑记录

字段:名称声明类参数类型异常类型标志

议定书:

接口:clojure.lang.IHashEq,clojure.lang.IKeywordLookup,clojure.lang.ILookup,clojure.lang.IObj,clojure.lang.IPersistentMap,java.ios.erialable,java.util.Map

场记录

字段:名称类型声明-类标志

议定书:

接口:clojure.lang.IHashEq,clojure.lang.IKeywordLookup,clojure.lang.ILookup,clojure.lang.IObj,clojure.lang.IPersistentMap,java.ios.erialable,java.util.Map

JavaReflectortype

字段:类装入器

议定书:反射器

接口:

方法记录

字段:名称返回类型声明类参数类型异常类型标志

议定书:

接口:clojure.lang.IHashEq,clojure.lang.IKeywordLookup,clojure.lang.ILookup,clojure.lang.IObj,clojure.lang.IPersistentMap,java.ios.erialable,java.util.Map

公共变量和函数

->AsmReflectorfunction

代码语言:javascript
复制
Usage: (->AsmReflector class-resolver)
代码语言:javascript
复制
Positional factory function for class clojure.reflect.AsmReflector.

->构造函数

代码语言:javascript
复制
Usage: (->Constructor name declaring-class parameter-types exception-types flags)
代码语言:javascript
复制
Positional factory function for class clojure.reflect.Constructor.

->场函数

代码语言:javascript
复制
Usage: (->Field name type declaring-class flags)
代码语言:javascript
复制
Positional factory function for class clojure.reflect.Field.

->Java反射器函数

代码语言:javascript
复制
Usage: (->JavaReflector classloader)
代码语言:javascript
复制
Positional factory function for class clojure.reflect.JavaReflector.

->方法功能

代码语言:javascript
复制
Usage: (->Method name return-type declaring-class parameter-types exception-types flags)
代码语言:javascript
复制
Positional factory function for class clojure.reflect.Method.

标志描述符

代码语言:javascript
复制
The Java access bitflags, along with their friendly names and
the kinds of objects to which they can apply.

映射->构造函数

代码语言:javascript
复制
Usage: (map->Constructor m#)
代码语言:javascript
复制
Factory function for class clojure.reflect.Constructor, taking a map of keywords to field values.

映射->场函数

代码语言:javascript
复制
Usage: (map->Field m#)
代码语言:javascript
复制
Factory function for class clojure.reflect.Field, taking a map of keywords to field values.

MAP->方法函数

代码语言:javascript
复制
Usage: (map->Method m#)
代码语言:javascript
复制
Factory function for class clojure.reflect.Method, taking a map of keywords to field values.

反射函数

代码语言:javascript
复制
Usage: (reflect obj & options)
代码语言:javascript
复制
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. 

在Clojure版本1.3中添加

类型反射函数

代码语言:javascript
复制
Usage: (type-reflect typeref & options)
代码语言:javascript
复制
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.

在Clojure版本1.3中添加

扫码关注腾讯云开发者

领取腾讯云代金券