模块 org.redkale
程序包 org.redkale.util

接口 Attribute<T,​F>

  • 类型参数:
    T - 字段依附的类
    F - 字段的数据类型

    public interface Attribute<T,​F>
    该类实现动态映射一个JavaBean类中成员对应的getter、setter方法; 代替低效的反射实现方式。
      public class Record {
    
          private String name;
    
          public String getName() {
              return name;
          }
    
          public void setName(String name) {
              this.name = name;
          }
      }
     
    获取name的 Attribute :
      Attribute<Record, String> nameAction = Attribute.create(Record.class.getDeclaredField("name"));
     
    等价于:
      Attribute<Record, String> nameAction = new Attribute<Record, String>() {
    
          private java.lang.reflect.Type _gtype = String.class;
    
          private java.lang.Object _attach;
    
          @Override
          public String field() {
              return "name";
          }
    
          @Override
          public String get(Record obj) {
              return obj.getName();
          }
    
          @Override
          public void set(Record obj, String value) {
              obj.setName(value);
          }
    
          @Override
          public Class type() {
              return String.class;
          }
    
          @Override
          public java.lang.reflect.Type genericType() {
              return _gtype;
          }
    
          @Override
          public Object attach() {
              return _attach;
          }
    
          @Override
          public Class declaringClass() {
              return Record.class;
          }
      };
     

    映射Field时,field必须满足以下条件之一:
    1、field属性是public且非final
    2、至少存在对应的getter、setter方法中的一个
    当不存在getter方法时,get操作固定返回null
    当不存在setter方法时,set操作为空方法

    详情见: https://redkale.org

    作者:
    zhangjx
    • 方法详细资料

      • type

        @Nonnull
        Class<? extends F> type()
        返回字段的数据类型
        返回:
        字段的数据类型
      • genericType

        @Nonnull
        default Type genericType()
        返回字段的数据泛型
        返回:
        字段的数据泛型
      • declaringClass

        @Nonnull
        Class<T> declaringClass()
        返回字段依附的类名
        返回:
        依附的类名
      • get

        F get​(T obj)
        获取指定对象的该字段的值
        参数:
        obj - 指定对象
        返回:
        字段的值
      • set

        void set​(T obj,
                 F value)
        给指定对象的该字段赋值
        参数:
        obj - 指定对象
        value - 字段新值
      • attach

        @Nullable
        default <E> E attach()
        附加对象
        类型参数:
        E - 泛型
        返回:
        附加对象
      • create

        static <T,​F> Attribute<T,​F> create​(Field field)
        根据一个Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        field - 字段,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Field field,
                                                       Object attach)
        根据一个Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        field - 字段,如果该字段不存在则抛异常
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(String fieldAlias,
                                                       Field field)
        根据一个Field和field的别名生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        fieldAlias - 别名
        field - 字段,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(String fieldAlias,
                                                       Field field,
                                                       Object attach)
        根据一个Field和field的别名生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        fieldAlias - 别名
        field - 字段,如果该字段不存在则抛异常
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldName)
        根据一个Class和field真实名称生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • createGetter

        static <T,​F> Attribute<T,​F> createGetter​(Class<T> clazz,
                                                             String fieldName)
        根据一个Class和字段名生成 Attribute 的getter对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldName,
                                                       Object attach)
        根据一个Class和field真实名称生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名,如果该字段不存在则抛异常
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       Field field)
        根据一个Class和Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        field - 字段,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> subclass,
                                                       Class<T> clazz,
                                                       Field field)
        根据一个Class和Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        subclass - 指定依附的子类
        clazz - 指定依附的类
        field - 字段,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       Field field,
                                                       Object attach)
        根据一个Class和Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        field - 字段,如果该字段不存在则抛异常
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> subclass,
                                                       Class<T> clazz,
                                                       Field field,
                                                       Object attach)
        根据一个Class和Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        subclass - 指定依附的子类
        clazz - 指定依附的类
        field - 字段,如果该字段不存在则抛异常
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Field field)
        根据一个Class、field别名和Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        field - 字段,如果该字段不存在则抛异常
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Field field,
                                                       Object attach)
        根据一个Class、field别名和Field生成 Attribute 对象。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        field - 字段,如果该字段不存在则抛异常
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Method getter,
                                                       Method setter)
        根据一个getter和setter方法生成 Attribute 对象。 tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Method getter,
                                                       Method setter,
                                                       Object attach)
        根据一个getter和setter方法生成 Attribute 对象。 tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       Method getter,
                                                       Method setter)
        根据Class、getter和setter方法生成 Attribute 对象。 tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       Method getter,
                                                       Method setter,
                                                       Object attach)
        根据Class、getter和setter方法生成 Attribute 对象。 tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F>[] create​(Class<T> clazz)
        根据Class生成getter、setter方法都存在的字段对应的 Attribute 对象数组。
        类型参数:
        T - 依附类的类型
        F - 字段的类型
        参数:
        clazz - 指定依附的类
        返回:
        Attribute对象数组
      • createGetters

        static <T,​F> Attribute<T,​F>[] createGetters​(Class<T> clazz)
        根据Class生成getter方法对应的 Attribute 对象数组。
        类型参数:
        T - 依附类的类型
        F - 字段的类型
        参数:
        clazz - 指定依附的类
        返回:
        Attribute对象数组
      • createSetters

        static <T,​F> Attribute<T,​F>[] createSetters​(Class<T> clazz)
        根据Class生成setter方法对应的 Attribute 对象数组。
        类型参数:
        T - 依附类的类型
        F - 字段的类型
        参数:
        clazz - 指定依附的类
        返回:
        Attribute对象数组
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Method getter,
                                                       Method setter)
        根据Class、字段别名、getter和setter方法生成 Attribute 对象。 tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Method getter,
                                                       Method setter,
                                                       Object attach)
        根据Class、字段别名、getter和setter方法生成 Attribute 对象。 tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Field field,
                                                       Method getter,
                                                       Method setter)
        根据Class、字段别名、Field、getter和setter方法生成 Attribute 对象。 Field、tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        field - 字段
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Field field,
                                                       Method getter,
                                                       Method setter,
                                                       Object attach)
        根据Class、字段别名、Field、getter和setter方法生成 Attribute 对象。 Field、tgetter、setter不能同时为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        field - 字段
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Class<F> fieldType)
        根据Class、字段别名、字段类型生成虚构的 Attribute 对象,get、set方法为空方法。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        fieldType - 字段的类
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Class<F> fieldType,
                                                       Object attach)
        根据Class、字段别名、字段类型生成虚构的 Attribute 对象,get、set方法为空方法。
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        fieldType - 字段的类
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Class<F> fieldType,
                                                       Field field,
                                                       Method getter,
                                                       Method setter)
        根据Class、字段别名、字段类型、Field、getter和setter方法生成 Attribute 对象。 fieldAlias/fieldType、Field、tgetter、setter不能同时为null.
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        fieldType - 字段类型
        field - 字段
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Class<T> clazz,
                                                       String fieldAlias,
                                                       Class<F> fieldType,
                                                       Field field,
                                                       Method getter,
                                                       Method setter,
                                                       Object attach)
        根据Class、字段别名、字段类型、Field、getter和setter方法生成 Attribute 对象。 fieldAlias/fieldType、Field、getter、setter不能同时为null.
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldAlias - 字段别名
        fieldType - 字段类型
        field - 字段
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(Type subclass,
                                                       Class<T> clazz,
                                                       String fieldAlias,
                                                       Class<F> fieldType,
                                                       Field field,
                                                       Method getter,
                                                       Method setter,
                                                       Object attach)
        根据Class、字段别名、字段类型、Field、getter和setter方法生成 Attribute 对象。 fieldAlias/fieldType、Field、tgetter、setter不能同时为null.
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        subclass - 指定依附的子类
        clazz - 指定依附的类
        fieldAlias - 字段别名
        fieldType - 字段类型
        field - 字段
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(@Nonnull
                                                       Class<T> clazz,
                                                       @Nonnull
                                                       String fieldName,
                                                       @Nonnull
                                                       Class<F> fieldType,
                                                       Function<T,​F> getter,
                                                       BiConsumer<T,​F> setter)
        根据Class、字段名、字段类型、getter和setter方法生成 Attribute 对象。 clazz、fieldName、fieldType都不能为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名
        fieldType - 字段类型
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(@Nonnull
                                                       Class<T> clazz,
                                                       @Nonnull
                                                       String fieldName,
                                                       @Nonnull
                                                       Class<F> fieldType,
                                                       Function<T,​F> getter,
                                                       BiConsumer<T,​F> setter,
                                                       Object attach)
        根据Class、字段名、字段类型、getter和setter方法生成 Attribute 对象。 clazz、fieldName、fieldType都不能为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名
        fieldType - 字段类型
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(@Nonnull
                                                       Class<T> clazz,
                                                       @Nonnull
                                                       String fieldName,
                                                       @Nonnull
                                                       Class<F> fieldType,
                                                       Type fieldGenericType,
                                                       Function<T,​F> getter,
                                                       BiConsumer<T,​F> setter)
        根据Class、字段名、字段类型、getter和setter方法生成 Attribute 对象。 clazz、fieldName、fieldType都不能为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名
        fieldType - 字段类型
        fieldGenericType - 字段泛型
        getter - getter方法
        setter - setter方法
        返回:
        Attribute对象
      • create

        static <T,​F> Attribute<T,​F> create​(@Nonnull
                                                       Class<T> clazz,
                                                       @Nonnull
                                                       String fieldName,
                                                       @Nonnull
                                                       Class<F> fieldType,
                                                       Type fieldGenericType,
                                                       Function<T,​F> getter,
                                                       BiConsumer<T,​F> setter,
                                                       Object attach)
        根据Class、字段名、字段类型、getter和setter方法生成 Attribute 对象。 clazz、fieldName、fieldType都不能为null
        类型参数:
        T - 依附类的类型
        F - 字段类型
        参数:
        clazz - 指定依附的类
        fieldName - 字段名
        fieldType - 字段类型
        fieldGenericType - 字段泛型
        getter - getter方法
        setter - setter方法
        attach - 附加对象
        返回:
        Attribute对象
      • map

        static <T extends Map,​F> Attribute<T,​F> map​(String fieldName)
        根据Map类生成 Attribute 对象。 fieldName都不能为null
        类型参数:
        T - 泛型
        F - 泛型
        参数:
        fieldName - 字段名
        返回:
        Attribute对象