## 接口的使用
org.redkale.util.Attribute

- 使用Attribute的程序包
  程序包 | 说明
  --- | ---
  org.redkale.convert | 提供数据的序列化和反解析功能
  org.redkale.convert.bson | 提供BSON的序列化和反解析功能
  org.redkale.convert.json | 提供JSON的序列化和反解析功能
  org.redkale.net.sncp | SNCP协议包,提供SNCP协议服务器
  org.redkale.source | 数据源(数据库、缓存)操作包
  org.redkale.util | RedKale工具包

- - ### org.redkale.convert中Attribute的使用

    声明为Attribute的org.redkale.convert中的字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected Attribute<T,F>` | DeMember.`attribute`

    返回Attribute的org.redkale.convert中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `Attribute<T,F>` | DeMember.`getAttribute()`

    参数类型为Attribute的org.redkale.convert中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `abstract void` | Writer.`writeFieldName(Attribute attribute)` 输出一个字段名

    参数类型为Attribute的org.redkale.convert中的构造器
    构造器和说明
    `DeMember(Attribute<T,F> attribute)`
    `DeMember(Attribute<T,F> attribute, Decodeable<R,F> decoder)`
    `EnMember(Attribute<T,F> attribute, Encodeable<W,F> encoder)`

  - ### org.redkale.convert.bson中Attribute的使用

    参数类型为Attribute的org.redkale.convert.bson中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | BsonWriter.`writeFieldName(Attribute attribute)`

  - ### org.redkale.convert.json中Attribute的使用

    参数类型为Attribute的org.redkale.convert.json中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | JsonWriter.`writeFieldName(Attribute attribute)`

  - ### org.redkale.net.sncp中Attribute的使用

    声明为Attribute的org.redkale.net.sncp中的字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected Attribute[]` | SncpClient.SncpAction.`paramAttrs`
    `protected Attribute[]` | SncpDynServlet.SncpServletAction.`paramAttrs`

  - ### org.redkale.source中Attribute的使用

    实现Attribute的org.redkale.source中的类
    限定符和类型 | 类和说明
    --- | ---
    `class` | `DataCallArrayAttribute<T,F>` 详情见: http://www.redkale.org
    `class` | `DataCallAttribute` 详情见: http://www.redkale.org

    返回Attribute的org.redkale.source中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `Attribute<T,java.io.Serializable>` | EntityCache.`getAttribute(java.lang.String fieldname)`
    `Attribute<T,java.io.Serializable>` | EntityInfo.`getAttribute(java.lang.String fieldname)`
    `Attribute<T,java.io.Serializable>` | EntityInfo.`getPrimary()`
    `Attribute<T,java.io.Serializable>` | EntityInfo.`getUpdateAttribute(java.lang.String fieldname)`

    返回变量类型为Attribute的类型的org.redkale.source中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected java.util.Map<java.lang.String,Attribute<T,java.io.Serializable>>` | EntityInfo.`getAttributes()`

    参数类型为Attribute的org.redkale.source中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected <T> java.util.function.Predicate<T>` | FilterNode.`createElementPredicate(EntityCache<T> cache, boolean join, Attribute<T,java.io.Serializable> attr)`
    `<V> T` | EntityCache.`update(java.io.Serializable id, Attribute<T,V> attr, V fieldValue)`
    `<V> T` | EntityCache.`updateColumnAnd(java.io.Serializable id, Attribute<T,V> attr, long andvalue)`
    `<V> T` | EntityCache.`updateColumnIncrement(java.io.Serializable id, Attribute<T,V> attr, long incvalue)`
    `<V> T` | EntityCache.`updateColumnOr(java.io.Serializable id, Attribute<T,V> attr, long orvalue)`

    类型变量类型为Attribute的org.redkale.source中的方法参数
    限定符和类型 | 方法和说明
    --- | ---
    `void` | EntityInfo.`forEachAttribute(java.util.function.BiConsumer<java.lang.String,Attribute<T,java.io.Serializable>> action)`
    `T` | EntityCache.`update(T value, java.util.Collection<Attribute<T,java.io.Serializable>> attrs)`

  - ### org.redkale.util中Attribute的使用

    返回Attribute的org.redkale.util中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.Class<T> clazz, java.lang.reflect.Field field)` 根据一个Class和Field生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.Class<T> clazz, java.lang.reflect.Method getter, java.lang.reflect.Method setter)` 根据Class、getter和setter方法生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.Class<T> clazz, java.lang.String fieldname)` 根据一个Class和field真实名称生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.Class<T> clazz, java.lang.String fieldalias, java.lang.reflect.Field field)` 根据一个Class、field别名和Field生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.Class<T> clazz, java.lang.String fieldalias, java.lang.reflect.Field field, java.lang.reflect.Method getter, java.lang.reflect.Method setter)` 根据Class、字段别名、Field、getter和setter方法生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.Class<T> clazz, java.lang.String fieldalias, java.lang.reflect.Method getter, java.lang.reflect.Method setter)` 根据Class、字段别名、getter和setter方法生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.reflect.Field field)` 根据一个Field生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.reflect.Method getter, java.lang.reflect.Method setter)` 根据一个getter和setter方法生成 Attribute 对象。
    `static <T,F> Attribute<T,F>` | Attribute.`create(java.lang.String fieldalias, java.lang.reflect.Field field)` 根据一个Field和field的别名生成 Attribute 对象。