验证码: 看不清楚,换一张 查询 注册会员,免验证
  • {{ basic.site_slogan }}
  • 打开微信扫一扫,
    您还可以在这里找到我们哟

    关注我们

java Lombok之@Accessors怎么使用

阅读:1080 来源:乙速云 作者:代码code

java Lombok之@Accessors怎么使用

      java Lombok之@Accessors用法

      之前用Lombok,只是为了省去写get和set方法,在学习的时候,突然发现,Accessors这个特殊的属性注解竟然还有如此强大的功能,特此为自己的无知记录一下。

      fluent属性

      fluent:流畅的,流利的意思,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。

      @Data
      @Accessors(fluent = true)
      public class User {
          private int id;
          private String name;
      }

      java Lombok之@Accessors怎么使用

      可以看到,当我们使用get或者set方法的时候,方法名都是基础的属性名称,非常的简洁

      chain属性

      chain:链式的,设置为true,则setter方法返回当前对象。

      @Data
      @Accessors(chain = true)
      public class User {
          private int id;
          private String name;
      }

      java Lombok之@Accessors怎么使用

      如上图可以看出,和常规的get和set方法名称一致,不过区别就是set方法返回的是对象名称,更加的直观,适合对象赋值时的连续赋值参数。

      prefix属性

      prefix:前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。

      @Data
      @Accessors(prefix = {"tb","tbn"})
      public class User {
          private int tb_id;
          private String tbn_name;
      }

      java Lombok之@Accessors怎么使用

      可以看出,方法中的get和set方法均过滤了相关的前缀属性,看起来更加的简洁。

      Lombok @Data @Accessors注解遇到的坑

      碰到个反射的问题,原数据是一个 map,对应数据库表的键值对,此时需要将这个 map 转换成 Entity,所以会用到反射。

      用了 Apache BeanUtils,用了 BeanMap 都是不行,无法反射。

      如下代码

      import com.alibaba.fastjson.JSON;
      import lombok.Data;
      import lombok.experimental.Accessors;
      import org.springframework.cglib.beans.BeanMap;
       
      import java.util.HashMap;
      import java.util.Map;
       
      public class Test {
       
          public static void main(String[] args) {
              Map map = new HashMap<>();
              map.put("id", "111");
              map.put("name", "xxxx");
       
              Model model = new Model();
              BeanMap.create(model).putAll(map);
              System.out.println(JSON.toJSONString(model));
          }
       
          @Data
          @Accessors(chain = true)
          public static class Model {
              private String id;
              private String name;
          }
      }

      此时你会发现其实没问题,但是输出结果如下:

      {}

      此时办法已经试遍了,后来修改 Entity,将 lombok 注解去掉,发现就OK了。此时不用想,肯定是遇到坑了,然后排查之后发现是 @Accessors 的问题,将其去掉就OK了。

      如下:

      import com.alibaba.fastjson.JSON;
      import lombok.Data;
      import lombok.experimental.Accessors;
      import org.springframework.cglib.beans.BeanMap;
       
      import java.util.HashMap;
      import java.util.Map;
       
      public class Test {
       
          public static void main(String[] args) {
              Map map = new HashMap<>();
              map.put("id", "111");
              map.put("name", "xxxx");
       
              Model model = new Model();
              BeanMap.create(model).putAll(map);
              System.out.println(JSON.toJSONString(model));
          }
       
          @Data
          public static class Model {
              private String id;
              private String name;
          }
      }
    分享到:
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: hlamps#outlook.com (#换成@)。
    相关文章
    {{ v.title }}
    {{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
    你可能感兴趣
    推荐阅读 更多>